diff --git a/404.html b/404.html new file mode 100644 index 00000000..e3d6dd72 --- /dev/null +++ b/404.html @@ -0,0 +1,364 @@ + + + + + + + + + Erro 404: Page not found | Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+
+

Erro 404: Page not found

+
+ +
+
+
+
+

+ + Books I Finished In 2023 + +

+ +
+

The book I finished in 2023 with notes. The Simple Path to Wealth: Your Road Map to Financial Independence and a Rich, Free Life The market always goes up. Investment portfolio: Stocks (VTSAX) + bonds (VBTLX) + cash,... Keep reading »

+
+
+
+

+ + Books I Finished In 2022 + +

+ +
+

The book I finished in 2022 with notes. Maybe You Should Talk To Someone: A Therapist, HER Therapist, and Our Lives Revealed A therapists also needs to see another therapist just like us. The Space Race Many astronauts... Keep reading »

+
+ +
+
+

+ + Danger Bot 2.0 Use Case + +

+ +
+

The below table demonstrates an elaborated use case of the Danger Bot 2.0. Steps Comments Explanation 1 An initial pull-request comment created by the Danger Bot 2.0. 2 When students add a new comment /dispute 846d e29c 4805,... Keep reading »

+
+
+
+

+ + Danger Bot 2.0 Tutorial Video + +

+ +
+

+ This tutorial video demonstrates the two-way communication capability of the Danger Bot 2.0. +References + https://github.com/Winbobob/Improving-Feedback-on-GitHub-Pull-Requests-A-Bots-Approach +/end + Keep reading »

+
+
+
+

+ + My First Week at Pinterest + +

+ +
+

I just finished my first week at Pinterest. Summarize my feeling in two words: awesome and fantastic! Fun fact: I met CEO Ben Silbermann four times in person (twice in a cafeteria, once in a corridor and once... Keep reading »

+
+ + + + + + +
+
+ + + + + \ No newline at end of file diff --git a/CNAME b/CNAME new file mode 100755 index 00000000..9f87c701 --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +zhewe.me diff --git a/about/index.html b/about/index.html new file mode 100644 index 00000000..7178abec --- /dev/null +++ b/about/index.html @@ -0,0 +1,165 @@ + + + + + + + + + About me | Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+
+
+

About me

+
+
+

Hello, my name is Zhewei Hu. I received my Ph.D. degree from the Department of Computer Science at North Carolina State University in May 2019. My advisor is Dr. Edward F. Gehringer. My research mainly focuses on computer science education and software engineering as student activities. Before joining NC State, I received my Bachelor degree from Zhejiang Normal University, China in 2014.

+

In August 2019, I joined Pinterest as a full-time site reliability engineer.

+

In July 2022, I switched to software engineer role at Pinterest.

+

My presentations

+
    +
  • Mar. 12th, 2019 - 2019 ASEE Southeastern Section Conference at Raleigh, NC.(slide)
  • +
  • May 30th, 2018 - ICSE 2018 SEET at Gothenburg, Sweden.(slide)
  • +
  • Nov. 17th, 2017 - Faculty Open Source Workshop (FOSS) at Redhat, Raleigh, NC.(slide)
  • +
  • Oct. 23rd, 2017 - SPLASH 2017 SPLASH-E at Vancouver, Canada.(slide)
  • +
  • Nov. 18th, 2016 - Faculty Open Source Workshop (FOSS) at Redhat, Raleigh, NC.(slide)
  • +
  • Oct. 15th, 2016 - IEEE Frontier in Education (FIE) at Erie, PA. (slide)
  • +
  • Jun. 29th, 2016 - Education Data Mining (EDM) CSPRED workshop at Raleigh, NC. (slide) +
+
+
+

To contact me please send an email to zhewei.hu33 AT gmail.com or look me in one of my social networks.

+ +
+
+
+ + + + + \ No newline at end of file diff --git a/ads.txt b/ads.txt new file mode 100644 index 00000000..69cfe47f --- /dev/null +++ b/ads.txt @@ -0,0 +1 @@ +google.com, pub-4925097394354650, DIRECT, f08c47fec0942fa0 \ No newline at end of file diff --git a/assets/.sprockets-manifest-c6d1a4931e5f7869e6b0b0a487a21fdf.json b/assets/.sprockets-manifest-c6d1a4931e5f7869e6b0b0a487a21fdf.json new file mode 100644 index 00000000..9e26dfee --- /dev/null +++ b/assets/.sprockets-manifest-c6d1a4931e5f7869e6b0b0a487a21fdf.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/assets/css/main.css b/assets/css/main.css new file mode 100755 index 00000000..ea5726e2 --- /dev/null +++ b/assets/css/main.css @@ -0,0 +1,4 @@ +pre,textarea{overflow:auto}.fa,body{-moz-osx-font-smoothing:grayscale}@font-face{font-family:'Source Sans Pro';font-style:normal;font-weight:300;src:local('Source Sans Pro Light'),local('SourceSansPro-Light'),url(http://fonts.gstatic.com/s/sourcesanspro/v9/toadOcfmlt9b38dHJxOBGMw1o1eFRj7wYC6JbISqOjY.ttf) format('truetype')}@font-face{font-family:'Source Sans Pro';font-style:normal;font-weight:400;src:local('Source Sans Pro'),local('SourceSansPro-Regular'),url(http://fonts.gstatic.com/s/sourcesanspro/v9/ODelI1aHBYDBqgeIAH2zlNzbP97U9sKh0jjxbPbfOKg.ttf) format('truetype')}@font-face{font-family:'Source Sans Pro';font-style:normal;font-weight:600;src:local('Source Sans Pro Semibold'),local('SourceSansPro-Semibold'),url(http://fonts.gstatic.com/s/sourcesanspro/v9/toadOcfmlt9b38dHJxOBGNNE-IuDiR70wI4zXaKqWCM.ttf) format('truetype')}@font-face{font-family:'Source Sans Pro';font-style:normal;font-weight:700;src:local('Source Sans Pro Bold'),local('SourceSansPro-Bold'),url(http://fonts.gstatic.com/s/sourcesanspro/v9/toadOcfmlt9b38dHJxOBGLsbIrGiHa6JIepkyt5c0A0.ttf) format('truetype')}@font-face{font-family:'PT Serif';font-style:normal;font-weight:400;src:local('PT Serif'),local('PTSerif-Regular'),url(http://fonts.gstatic.com/s/ptserif/v8/EgBlzoNBIHxNPCMwXaAhYPesZW2xOQ-xsNqO47m55DA.ttf) format('truetype')}@font-face{font-family:'PT Serif';font-style:normal;font-weight:700;src:local('PT Serif Bold'),local('PTSerif-Bold'),url(http://fonts.gstatic.com/s/ptserif/v8/QABk9IxT-LFTJ_dQzv7xpJ0EAVxt0G0biEntp43Qt6E.ttf) format('truetype')}.btn,.button,.button-ghost,.button-secondary,.pagination .next,.pagination .prev{position:relative;letter-spacing:.05em;text-align:center;text-decoration:none;white-space:nowrap;cursor:pointer;display:inline-block;margin-top:5px;margin-bottom:5px;height:3.2em;line-height:3.2em;padding:0 2.8em;font-size:1.2rem;transition:background-color .2s ease-in-out,color .2s ease-in-out,border-color .2s ease-in-out;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none}.btn,.btn:active,.btn:focus,.btn:hover,.button,.button-ghost,.button-ghost:active,.button-ghost:focus,.button-ghost:hover,.button-secondary,.button-secondary:active,.button-secondary:focus,.button-secondary:hover,.button:active,.button:focus,.button:hover,.pagination .next,.pagination .next:active,.pagination .next:focus,.pagination .next:hover,.pagination .prev,.pagination .prev:active,.pagination .prev:focus,.pagination .prev:hover{outline:0}.btn:active,.button-ghost:active,.button-secondary:active,.button:active,.pagination .next:active,.pagination .prev:active{top:2px}.clearfix:after,.clearfix:before,.header:after,.header:before,.highlight:after,.highlight:before,.pagination:after,.pagination:before,.posts .post:after,.posts .post:before{content:"";display:table}.clearfix:after,.header:after,.highlight:after,.pagination:after,.posts .post:after{clear:both}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}.contact .alert,[hidden],template{display:none}audio:not([controls]){display:none;height:0}a{background:0 0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,optgroup,strong{font-weight:700}dfn{font-style:italic}mark{background:#ff0;color:#000}.card,body{background-color:#fff}small{font-size:80%}sub,sup{line-height:0;vertical-align:baseline}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}hr{box-sizing:content-box;height:0}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}.header h1,input,label,select,textarea{font-family:"Source Sans Pro",Helvetica,sans-serif}.highlight .ge,.pagination .page-number,blockquote,em{font-style:italic}button{overflow:visible}button,select{text-transform:none}.header h1 strong,.navbar a{text-transform:uppercase}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}legend{border:0;padding:0}textarea{resize:vertical}*,::after,::before{box-sizing:border-box}body,html{width:100%;height:100%}body{margin:0;-webkit-font-smoothing:antialiased;letter-spacing:.01em}figure{margin:0;padding:0}abbr{cursor:help}.container,.container-full{position:relative;padding-left:30px;padding-right:30px}.wrapper{padding:2em 0;margin:0 auto}.dot{border-radius:50%}.txt-white{color:#fff!important}.txt-center{text-align:center!important}.txt-left{text-align:left!important}.txt-right{text-align:right!important}.txt-justify{text-align:justify!important}.alert,.header{text-align:center}.pull-left{float:left}.pull-right{float:right}img.pull-left{margin-right:20px}img.pull-right{margin-left:20px}.card{padding:2em;-ms-box-shadow:0 0 0 0,0 6px 12px rgba(34,34,34,.1);-o-box-shadow:0 0 0 0,0 6px 12px rgba(34,34,34,.1);box-shadow:0 0 0 0,0 6px 12px rgba(34,34,34,.1)}.alert{padding:1em;margin-bottom:1em;border-radius:.25em}.alert p{text-shadow:0 1px 1px rgba(0,0,0,.2);margin:0}.alert-success{background-color:#00E600;border:1px solid #00cd00;color:#fff}.alert-error{background-color:#f04124;border:1px solid #ea2f10;color:#fff}.scroll-up{position:fixed;right:15px;bottom:-80px;transition:all .2s linear;font-size:2em!important}.scroll-up,.scroll-up:focus,.scroll-up:hover{color:rgba(45,49,56,.8);text-decoration:none;border:0}.scroll-up:hover{-webkit-animation:none;animation:none}.animated{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.animated.infinite{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.animated.hinge{-webkit-animation-duration:2s;animation-duration:2s}.tada{-webkit-animation-name:tada;animation-name:tada}.fadeIn{-webkit-animation-name:fadeIn;animation-name:fadeIn}.video-responsive{margin:1em 0;position:relative;padding-bottom:56.25%;padding-top:25px;height:0}.video-responsive embed,.video-responsive iframe,.video-responsive object{position:absolute;top:0;left:0;width:100%;height:100%;border:0;padding:0;margin:0}.header{background-color:#333;color:#fff;padding:1em;overflow:hidden;position:relative}.header .svg-pattern{position:absolute}.header .header-in{position:relative;z-index:10}.header a{text-decoration:none;color:#fff}.header .author-thumb{margin:0 0 1em;-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-animation-name:bounce-rotate;animation-name:bounce-rotate;display:inline;width:6.25em}.footer,.header h1{-webkit-animation-duration:1s}.header h1{-webkit-animation-name:bounce-right;animation-name:bounce-right;color:rgba(255,255,255,.5);line-height:1.5;display:block;margin:0 0 1em;font-size:1.375rem;font-weight:400;animation-duration:1s}.header h1 em,.header h1 strong{color:rgba(255,255,255,.9)}.navbar{position:relative;list-style:none;padding:1em 0 .5em;margin:0}.navbar:before{content:'';position:absolute;top:0;width:50px;left:50%;margin-left:-25px;height:2px;background-color:rgba(255,255,255,.6)}.navbar li{font-size:1rem;margin:0 .4em;padding:0}fieldset,ol,p,ul{margin:0 0 1em}.navbar a,.navbar li{display:inline-block}.navbar .search span,label abbr{display:none}.navbar a{padding:.6em;line-height:1;color:rgba(255,255,255,.5)}ol,ol li,ul,ul li{padding-left:1em}td,th{padding:1em 0}.navbar a,.navbar a:active,.navbar a:hover,.navbar a:visited{-webkit-backface-visibility:hidden;backface-visibility:hidden;position:relative;transition:color .4s ease}.navbar a:active,.navbar a:focus,.navbar a:hover{color:#fff}.after{position:relative}.after:after{content:"";transition:all .4s cubic-bezier(.21,1,.84,1.01);-webkit-transform:translateX(-50%);transform:translateX(-50%);-webkit-backface-visibility:hidden;backface-visibility:hidden;background:#fff;position:absolute;height:2px;width:0;left:50%;bottom:0}.after:active:after,.after:focus:after,.after:hover:after{width:100%}fieldset{background-color:#f7f7f7;border:1px solid #e0e0e0;padding:2em}legend{padding-bottom:10px;margin-bottom:20px;font-size:2rem;border-bottom:1px solid #e0e0e0}input,label,select,textarea{font-size:1.2rem;color:rgba(45,49,56,.8)}input[type=text],input[type=email],legend,select,textarea{display:block;width:100%;-moz-appearance:none;-webkit-appearance:none}input,label,select{display:block;font-family:"Open Sans","Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-size:1em}label{font-weight:600;margin-bottom:.375em}label.required::after{content:"*"}input[type=number],input[type=search],input[type=text],input[type=email],input[type=date],input[type=password],input[type=tel],input[type=url],textarea{background-color:#fff;border:1px solid #e0e0e0;border-radius:.25em;box-shadow:inset 0 1px 1px rgba(0,0,0,.08);box-sizing:border-box;margin-bottom:1em;padding:.66667em 1em;transition:border-color 150ms cubic-bezier(.21,1,.84,1.01)}input[type=number]:hover,input[type=search]:hover,input[type=text]:hover,input[type=email]:hover,input[type=date]:hover,input[type=password]:hover,input[type=tel]:hover,input[type=url]:hover,textarea:hover{border-color:#b3b3b3}input[type=number]:focus,input[type=search]:focus,input[type=text]:focus,input[type=email]:focus,input[type=date]:focus,input[type=password]:focus,input[type=tel]:focus,input[type=url]:focus,textarea:focus{border-color:#00ced1;box-shadow:0 0 5px rgba(0,206,209,.2);outline:0}input[type=number]:disabled,input[type=search]:disabled,input[type=text]:disabled,input[type=email]:disabled,input[type=date]:disabled,input[type=password]:disabled,input[type=tel]:disabled,input[type=url]:disabled,textarea:disabled{background-color:#f2f2f2;cursor:not-allowed}input[type=number]:disabled:hover,input[type=search]:disabled:hover,input[type=text]:disabled:hover,input[type=email]:disabled:hover,input[type=date]:disabled:hover,input[type=password]:disabled:hover,input[type=tel]:disabled:hover,input[type=url]:disabled:hover,textarea:disabled:hover{border:1px solid #e0e0e0}input[type=number].error,input[type=search].error,input[type=text].error,input[type=email].error,input[type=date].error,input[type=password].error,input[type=tel].error,input[type=url].error,textarea.error{border-color:#f04124}input[type=search]{-webkit-appearance:none;-moz-appearance:none;appearance:none}input[type=checkbox],input[type=radio]{display:inline;margin-right:.5em}input[type=checkbox]+label,input[type=radio]+label{display:inline-block}.footer span,blockquote small{display:block}input[type=file]{margin-bottom:1em;width:100%}select{margin-bottom:2em;max-width:100%;width:auto}ol ol,ol ul,ul ol,ul ul{padding-left:2em;margin-top:1em;margin-bottom:1em}ul{list-style:disc}ol{list-style:decimal}dl{margin-bottom:1em}dl dt{font-weight:700;margin-top:1em}dl dd{margin:0}table{border-spacing:0;border-collapse:collapse;-webkit-font-feature-settings:"kern","liga","tnum";-moz-font-feature-settings:"kern","liga","tnum";font-feature-settings:"kern","liga","tnum";margin:1em 0;table-layout:fixed;width:100%}th{border-bottom:1px solid #a8a8a8;font-weight:600;text-align:left}.footer,.hero-inner,.modal-search-close,.pagination,.post-footer .share,.social a{text-align:center}td{border-bottom:1px solid #e0e0e0}td,th,tr{vertical-align:middle}body,input,select,textarea{color:rgba(45,49,56,.8);font-family:"Source Sans Pro",Helvetica,sans-serif;font-size:1.2rem;line-height:1.6;font-weight:400}a{color:#00ced1;text-decoration:underline;transition:color 150ms cubic-bezier(.21,1,.84,1.01)}a:active,a:focus,a:hover{text-decoration:none;color:#00b9bc}h1,h2,h3,h4,h5,h6,li,p{text-rendering:optimizeLegibility}h1,h2,h3,h4,h5,h6{color:rgba(45,49,56,.8);font-family:"PT Serif",sans-serif;line-height:1.2;margin:1.33333em 0;font-weight:700}h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{color:inherit;text-decoration:none}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-size:60%}h1{font-size:1.875rem}h2{font-size:1.75rem}h3{font-size:1.375rem}h4{font-size:1.25rem}h5,h6{font-size:1rem}sub,sup{font-size:.8em;position:relative}sub{top:.5em}sup{top:-.5em}strong{font-weight:600}hr{border:0;border-bottom:1px solid #e0e0e0;margin:2em 0}hr.major{margin:3em 0}img,picture{margin:0;max-width:100%}blockquote{border-left:solid 4px #00ced1;margin:0 0 1em;padding:.5em 0 .5em 2em}blockquote,blockquote p{font-size:1.44rem}blockquote p{margin:0}blockquote small:before{content:'—';margin-top:.5em}blockquote small,q small{font-size:60%}code,pre{font-family:"courier new",monospace;font-size:.9em;margin:0}code{background:#ededed;border-radius:0;border:0;padding:0 4px}.btn,.button,.button-secondary{border-radius:.25em;font-weight:600;text-transform:uppercase}pre{-webkit-overflow-scrolling:touch}.hero-inner h1,.search-label{font-family:"Source Sans Pro",Helvetica,sans-serif}pre code{line-height:1.75em}.footer{background-color:#333;padding:2em 1em;animation-duration:1s;-webkit-animation-name:fade-in-up;animation-name:fade-in-up}.footer p{font-size:1rem;color:#d1d1d1}.footer p small{color:#bfbfbf}.footer .social{margin-top:0}.footer span{font-size:.7em;margin-top:1em;color:#ccc}.social a,.social li{display:inline-block}.footer a{color:#f2f2f2}.social{padding:0;margin:2em 0 1em;-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-animation-name:fade-in-up;animation-name:fade-in-up}.social li{padding:0 1em}.social a{text-decoration:none;color:#ccc;transition:opacity .2s linear,color .2s linear;opacity:.7;filter:alpha(opacity=70);line-height:60px;font-size:1.8rem}.social a:active,.social a:focus,.social a:hover{opacity:.9;filter:alpha(opacity=90);color:#00ced1}html.no-js .scroll-up{bottom:10px!important}html.no-js .navbar .search{display:none;visibility:hidden}.btn,.button{color:#fff;background-color:#8cd1a8;border:1px solid #7aca9a}.btn:focus,.btn:hover,.button:focus,.button:hover{color:#f2f2f2;border-color:#64c18a;background-color:#7aca9a}.button-secondary{color:#fff;background-color:#383838;border:1px solid #2b2b2b}.button-secondary:focus,.button-secondary:hover{color:#f2f2f2;border-color:#1c1c1c;background-color:#2b2b2b}.button-ghost{font-weight:600;text-transform:uppercase;border-radius:.25em;color:#fff;background-color:transparent;border:1px solid #f2f2f2}.button-ghost:focus,.button-ghost:hover{color:#f2f2f2;border-color:#e3e3e3;background-color:rgba(242,242,242,.1)}.button-ghost.after:after{height:3px}.svg-pattern,.svg-pattern svg{width:100%;height:100%}body.home{width:100%;display:table}body.home .wrapper{background-color:#333;display:table-cell;vertical-align:middle;padding:0}.author-thumb{padding:3px;border:1px solid rgba(255,255,255,.3)}.svg-pattern{position:fixed;z-index:2;top:0;left:0}.svg-pattern .polygon{transition:-webkit-transform .3s ease-in-out,opacity .3s ease-in-out;transition:opacity .3s ease-in-out,-webkit-transform .3s ease-in-out;transition:transform .3s ease-in-out,opacity .3s ease-in-out;transition:transform .3s ease-in-out,opacity .3s ease-in-out,-webkit-transform .3s ease-in-out;-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:center bottom;transform-origin:center bottom;fill:transparent}.hero-inner{position:relative;z-index:10;padding:1em 2em 0}.hero-inner .author-thumb,.hero-inner .button-ghost,.hero-inner .social,.hero-inner h1{opacity:0;-webkit-animation-delay:.3s;animation-delay:.3s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;position:relative;z-index:10}.hero-inner h1{position:relative;-webkit-animation-name:bounce-right;animation-name:bounce-right;color:rgba(255,255,255,.5);margin-top:.5em;margin-bottom:1em;padding-bottom:1em;font-size:1.625rem;font-weight:300;text-transform:none;-webkit-animation-duration:.6s;animation-duration:.6s}.hero-inner h1:after{content:'';position:absolute;bottom:0;width:50px;left:50%;margin-left:-25px;height:2px;background-color:rgba(255,255,255,.6)}.hero-inner h1 strong{display:block;font-size:1.875rem;line-height:1.65;font-weight:600;text-transform:uppercase;letter-spacing:-1px}.hero-inner h1 em,.hero-inner h1 strong{color:#fff}.hero-inner .social{-webkit-animation-name:bounce-left;animation-name:bounce-left}.hero-inner .author-thumb,.hero-inner .button-ghost{-webkit-animation-name:bounce-rotate;animation-name:bounce-rotate;-webkit-animation-duration:.7s;animation-duration:.7s}.hero-inner .button-ghost{margin:.5em 0;width:100%;display:block}.hero-inner .button-ghost:first-child{-webkit-animation-delay:.4s;animation-delay:.4s}.hero{position:relative;z-index:10}.post .post-content img{display:block;width:100%;height:auto;margin-bottom:1.6em}.post .post-content em{border-bottom:1px solid #00ced1}.post .post-content hr{background:#e0e0e0;height:2px;width:50px;border:none}.post .post-thumb{max-height:320px;overflow:hidden;margin-bottom:2em}.post-header{border-bottom:1px solid #e0e0e0;padding-bottom:.5em;margin-bottom:2em;margin-top:0}.post-header h1{font-size:2rem;margin-top:0;margin-bottom:0}.post-title{font-size:1.375rem;margin-bottom:.4em;line-height:1.4;text-transform:none}.post-title a{text-decoration:none;color:rgba(45,49,56,.8)}.post-title a:active,.post-title a:focus,.post-title a:hover{color:#00ced1}.post-meta{margin-top:1em;margin-bottom:2em}.post-meta img,.post-meta span,.post-meta time{font-size:.875rem;color:#949494;vertical-align:middle;font-style:italic}.post-meta .fa{margin-right:.2em}.post-meta .author-thumb{height:30px;width:30px;margin-right:4px}.posts .post{position:relative;margin-bottom:2em;padding-bottom:2em}.posts .post p{width:100%;overflow:hidden}.posts .post:before{content:"";position:absolute;bottom:0;left:0;background:#e0e0e0;height:2px;width:50px}.posts .post-header{border-bottom:0;margin-bottom:0;padding-bottom:0}.posts .post-title{margin-top:0}.posts .post-meta{margin-top:1em;margin-bottom:1em}.disqus,.disqus h3{margin-top:0}.disqus{padding-top:0;padding-bottom:2em}.post-footer{background-color:#f2f2f2;margin:2em 0;padding:2em 0}.post-footer h4{font-size:1.125rem;font-weight:400;margin:0}.post-footer p{margin:1em 0 0;line-height:1.7em;font-size:.9375rem}.post-footer .author{margin-right:180px}.post-footer .author-thumb{width:100px;float:left;margin-right:1em;border-color:rgba(0,0,0,.2)}.post-footer h4 a{color:rgba(45,49,56,.8);text-decoration:none}.post-footer h4 a:hover{text-decoration:underline}.post-footer .share{position:absolute;width:140px;top:.5em;right:1.5em}.post-footer .share h4{margin-bottom:.6em}.post-footer .share a{font-size:1.6em;display:inline-block;margin:0 .3em;color:#949494;text-decoration:none;transition:opacity .4s linear;border:0;opacity:.6}.post-footer .share a.share-facebook{color:#3b599f}.post-footer .share a.share-twitter{color:#28a9e0}.post-footer .share a:hover{opacity:1}.pagination{width:100%;margin:2em auto 1em}.pagination ul{list-style:none;padding:0;margin:0;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.pagination li{margin:1em 0;padding:0}.pagination li.button{display:inline-block}.pagination .next,.pagination .prev{font-weight:600;text-transform:lowercase;border-radius:.25em;color:#383838;background-color:transparent;border:1px solid #2b2b2b;height:3.6em;line-height:3.6em;padding:0 1.66667em;font-size:.8rem}.pagination .next:focus,.pagination .next:hover,.pagination .prev:focus,.pagination .prev:hover{color:#2b2b2b;border-color:#1c1c1c;background-color:rgba(242,242,242,.1)}.pagination a,.pagination a.next,.pagination a.prev,.pagination li,.pagination span{display:block;width:100%}.pagination .disabled,.pagination a{border:1px solid #adadad;border-radius:.25em}.no-touch .pagination a:hover{background-color:#bababa}.pagination a:active{-webkit-transform:scale(.9);transform:scale(.9)}.pagination .page-number{color:#c7c7c7;font-size:.8rem;line-height:4.5em}.pagination .disabled{border-color:rgba(148,148,148,.7);color:rgba(148,148,148,.4);pointer-events:none}.pagination .disabled::after,.pagination .disabled::before{opacity:.4}.modal-search,.modal-search__overlay{width:100%;height:100%;top:0;left:0}.modal-search-close{position:absolute;top:0;right:20px;padding:5px 10px;margin:0;opacity:.8;background-color:transparent;display:inline-block;font-size:4.25rem;border:0;border-radius:4px}.modal-search-close,.modal-search-close:focus,.modal-search-close:hover{text-decoration:none;color:#fff}body.modal-search--open{overflow:hidden!important}.modal-search{position:fixed;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;pointer-events:none;z-index:1001;width:100%}.modal-search__overlay{background-color:rgba(0,0,0,.95);position:absolute;z-index:1;padding:0;margin:0;visibility:hidden;transition:opacity .3s;opacity:0;filter:alpha(opacity=0)}.modal-search--open .modal-search__overlay{opacity:1;filter:alpha(opacity=100);visibility:visible;pointer-events:auto}.modal-search__content{width:100%;height:100%;overflow-y:auto;min-width:290px;background:0 0;padding:0;text-align:center;position:relative;z-index:5;opacity:0}.modal-search--open .modal-search__content{pointer-events:auto}.modal-search h2{font-weight:400;font-size:2em;padding:0 0 2em;margin:0}.modal-search.modal-search--close .modal-search__content,.modal-search.modal-search--open .modal-search__content{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards}.modal-search.modal-search--open .modal-search__content{-webkit-animation-name:anim-open;animation-name:anim-open}.modal-search.modal-search--close .modal-search__content{-webkit-animation-name:anim-close;animation-name:anim-close}.search-label{margin-bottom:20px;font-weight:700;text-transform:uppercase;color:#fff;font-size:1rem;margin-top:26px}.modal-search-container{padding:7em 10em 0;color:#fff}.modal-search-container .form-group{position:relative}.modal-search-container .form-group i{position:absolute;top:40px;right:20px}.modal-search-container input[type=text]{border:0;border-bottom:1px solid rgba(255,255,255,.65);outline:0;background-color:transparent;color:rgba(255,255,255,.8);font-family:"Source Sans Pro",Helvetica,sans-serif;border-radius:0;width:100%;padding:6px 50px 6px 0;font-size:2.375rem;text-transform:lowercase;font-weight:300}.modal-search-container input[type=text]:active,.modal-search-container input[type=text]:focus{box-shadow:none!important;outline:0!important}.modal-search-container ::-webkit-input-placeholder{text-transform:lowercase;color:rgba(255,255,255,.8)}.modal-search-container :-moz-placeholder{text-transform:lowercase;color:rgba(255,255,255,.8)}.modal-search-container ::-moz-placeholder{text-transform:lowercase;color:rgba(255,255,255,.8)}.modal-search-container :-ms-input-placeholder{text-transform:lowercase;color:rgba(255,255,255,.8)}.search-results{text-align:left;list-style:none;padding:15px 0;margin:10px 0}.search-results li{padding:5px 0}.search-results a{overflow:hidden;text-decoration:none;color:rgba(255,255,255,.8);font-size:1.25rem;padding:5px 0;border-bottom:1px solid transparent;display:block}.search-results a:hover{border-color:#fff}.search-results a span{float:left;font-family:"PT Serif",sans-serif}.search-results a small{float:right;opacity:.6}#selectionSharerPopover{display:none;position:absolute;top:-100px;left:-100px;z-index:1010}#selectionSharerPopover:after{content:'';display:block;position:absolute;bottom:-3px;left:50%;margin-left:-4px;width:8px;height:8px;-webkit-transform:rotate(45deg);transform:rotate(45deg);background:#262625;box-shadow:0 0 2px #262625}#selectionSharerPopover.anim{transition:top 75ms ease-out;animation:selectionSharerPopover-animation 180ms forwards linear;-webkit-animation:selectionSharerPopover-animation 180ms forwards linear}#selectionSharerPopover-inner{position:relative;overflow:hidden;border-radius:5px;border:1px solid;border-color:#262625 #1c1c1b #121211;box-shadow:0 1px 3px -1px rgba(0,0,0,.7),inset 0 0 1px rgba(255,255,255,.07),inset 0 0 2px rgba(255,255,255,.15);background-image:linear-gradient(to bottom,rgba(49,49,47,.97),#262625);background-repeat:repeat-x}#selectionSharerPopover .selectionSharerPopover-clip{position:absolute;bottom:-11px;display:block;left:50%;clip:rect(12px 24px 24px 0);margin-left:-12px;width:24px;height:24px;line-height:24px}#selectionSharerPopover .selectionSharerPopover-arrow{display:block;width:20px;height:20px;-webkit-transform:rotate(45deg) scale(.5);transform:rotate(45deg) scale(.5);background-color:#454543;border:2px solid #121211;box-sizing:content-box}.selectionSharer ul{padding:0;display:inline}.selectionSharer ul li{float:left;list-style:none;background:0 0;margin:0}.selectionSharer a.action{display:block;text-indent:-200px;margin:5px 7px;width:20px;height:20px;border:0}.selectionSharer a:hover{color:#ccc}.selectionSharer a.tweet{background:url('data:image/svg+xml;utf8,') 2px 4px no-repeat;background-size:18px}.selectionSharer a.facebook{background:url('data:image/svg+xml;utf8,') 0 2px no-repeat;background-size:18px;display:none}.selectionSharer a.email{background:url('data:image/svg+xml;utf8,') 0 4px no-repeat;background-size:20px}#selectionSharerPopunder.fixed{transition:bottom .5s ease-in-out;width:100%;position:fixed;left:0;bottom:-50px}.selectionSharer{transition:-webkit-transform .6s ease-in-out}.selectionSharer.moveDown{-webkit-transform:translate3d(0,60px,0)}#selectionSharerPopunder{position:absolute;left:0;width:100%;height:0;transition:height .5s ease-in-out;background:#ccc;border:0;box-shadow:inset 0 10px 5px -10px rgba(0,0,0,.5),inset 0 -10px 5px -10px rgba(0,0,0,.5);border-radius:0;overflow:hidden}#selectionSharerPopunder.show{height:50px}.selectionSharerPlaceholder{height:1em;margin-bottom:-2em;transition:height .5s ease-in-out}.selectionSharerPlaceholder.show{height:50px!important}#selectionSharerPopunder-inner ul{overflow:hidden;float:right;margin:0}#selectionSharerPopunder-inner ul li{padding:5px;overflow:hidden}#selectionSharerPopunder-inner label{color:#fff;font-weight:300;line-height:50px;margin:0 20px 0 10px}#selectionSharerPopunder-inner a{width:30px;height:30px;background-size:30px}#selectionSharerPopunder-inner a.tweet{background-position:0 2px}/*! Swipebox v1.3.0 | Constantin Saguin csag.co | MIT License | github.com/brutaldesign/swipebox */html.swipebox-html.swipebox-touch{overflow:hidden!important}#swipebox-overlay img{border:none!important}#swipebox-overlay{width:100%;height:100%;position:fixed;top:0;left:0;z-index:99999!important;overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#swipebox-container{position:relative;width:100%;height:100%}#swipebox-slider{transition:-webkit-transform .4s ease;transition:transform .4s ease;transition:transform .4s ease,-webkit-transform .4s ease;height:100%;left:0;top:0;width:100%;white-space:nowrap;position:absolute;display:none;cursor:pointer}#swipebox-slider .slide{height:100%;width:100%;line-height:1px;text-align:center;display:inline-block}#swipebox-slider .slide:before{content:"";display:inline-block;height:50%;width:1px;margin-right:-1px}#swipebox-slider .slide .swipebox-inline-container,#swipebox-slider .slide .swipebox-video-container,#swipebox-slider .slide img{display:inline-block;max-height:100%;max-width:100%;margin:0;padding:0;width:auto;height:auto;vertical-align:middle}#swipebox-slider .slide .swipebox-video-container{background:0 0;max-width:1140px;max-height:100%;width:100%;padding:5%;box-sizing:border-box}#swipebox-slider .slide .swipebox-video-container .swipebox-video{width:100%;height:0;padding-bottom:56.25%;overflow:hidden;position:relative}#swipebox-slider .slide .swipebox-video-container .swipebox-video iframe{width:100%!important;height:100%!important;position:absolute;top:0;left:0}#swipebox-slider .slide-loading{background:url(/assets/images/loader.gif) center center no-repeat}#swipebox-bottom-bar,#swipebox-top-bar{transition:.5s;position:absolute;left:0;z-index:999;height:50px;width:100%}#swipebox-bottom-bar{bottom:-50px}#swipebox-bottom-bar.visible-bars{-webkit-transform:translate3d(0,-50px,0);transform:translate3d(0,-50px,0)}#swipebox-top-bar{top:-50px;color:#fff!important;font-size:15px;line-height:43px;font-family:Helvetica,Arial,sans-serif}#swipebox-top-bar.visible-bars{-webkit-transform:translate3d(0,50px,0);transform:translate3d(0,50px,0)}#swipebox-title{display:block;width:100%;text-align:center}#swipebox-close,#swipebox-next,#swipebox-prev{background-image:url(/assets/images/icons.png);background-repeat:no-repeat;border:none!important;text-decoration:none!important;cursor:pointer;width:50px;height:50px;top:0}#swipebox-arrows{display:block;margin:0 auto;width:100%;height:50px}#swipebox-prev{background-position:-32px 13px;float:left}#swipebox-next{background-position:-78px 13px;float:right}#swipebox-close{top:0;right:0;position:absolute;z-index:9999;background-position:15px 12px}.swipebox-no-close-button #swipebox-close{display:none}#swipebox-next.disabled,#swipebox-prev.disabled{opacity:.3}.swipebox-no-touch #swipebox-overlay.rightSpring #swipebox-slider{-webkit-animation:rightSpring .3s;animation:rightSpring .3s}.swipebox-no-touch #swipebox-overlay.leftSpring #swipebox-slider{-webkit-animation:leftSpring .3s;animation:leftSpring .3s}.swipebox-touch #swipebox-container:after,.swipebox-touch #swipebox-container:before{-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:all .3s ease;content:' ';position:absolute;z-index:999;top:0;height:100%;width:20px;opacity:0}.swipebox-touch #swipebox-container:before{left:0;box-shadow:inset 10px 0 10px -8px #656565}.swipebox-touch #swipebox-container:after{right:0;box-shadow:inset -10px 0 10px -8px #656565}.swipebox-touch #swipebox-overlay.leftSpringTouch #swipebox-container:before,.swipebox-touch #swipebox-overlay.rightSpringTouch #swipebox-container:after{opacity:1}#swipebox-overlay{background:#0d0d0d}#swipebox-bottom-bar,#swipebox-top-bar{text-shadow:1px 1px 1px #000;background:#000;opacity:.95}.highlight{padding:0;margin-top:1em;margin-bottom:1em}.highlight,.highlight .hll,.highlight code,.highlight pre{position:relative;background-color:#333!important;border:0}.highlight pre{margin:0;padding:1em 2em;white-space:pre;line-height:23px;overflow-x:auto;word-break:inherit;word-wrap:inherit}.highlight pre,.highlight pre code{color:#efd}.highlight pre code{white-space:pre;padding:0}.highlight pre code *{white-space:nowrap}.highlight .c{color:#75715e}.highlight .err{color:#f2f1f2}.highlight .k{color:#66d9ef}.highlight .l{color:#ae81ff}.highlight .n{color:#f8f8f2}.highlight .o{color:#f92672}.highlight .p{color:#f8f8f2}.highlight .c1,.highlight .cm,.highlight .cp,.highlight .cs{color:#75715e}.highlight .gs{font-weight:700}.highlight .kc,.highlight .kd{color:#66d9ef}.highlight .kn{color:#f92672}.highlight .kp,.highlight .kr,.highlight .kt{color:#66d9ef}.highlight .ld{color:#e6db74}.highlight .m{color:#ae81ff}.highlight .s{color:#e6db74}.highlight .na{color:#a6e22e}.highlight .nb{color:#f8f8f2}.highlight .nc{color:#a6e22e}.highlight .no{color:#66d9ef}.highlight .nd{color:#a6e22e}.highlight .ni{color:#f8f8f2}.highlight .ne,.highlight .nf{color:#a6e22e}.highlight .nl,.highlight .nn{color:#f8f8f2}.highlight .nx{color:#a6e22e}.highlight .py{color:#f8f8f2}.highlight .nt{color:#f92672}.highlight .nv{color:#f8f8f2}.highlight .ow{color:#f92672}.highlight .w{color:#f8f8f2}.highlight .mf,.highlight .mh,.highlight .mi,.highlight .mo{color:#ae81ff}.highlight .s2,.highlight .sb,.highlight .sc,.highlight .sd{color:#e6db74}.highlight .se{color:#ae81ff}.highlight .s1,.highlight .sh,.highlight .si,.highlight .sr,.highlight .ss,.highlight .sx{color:#e6db74}.highlight .bp,.highlight .vc,.highlight .vg,.highlight .vi{color:#f8f8f2}.highlight .il{color:#ae81ff}.highlight .gu{color:#75715e}.highlight .gd{color:#f92672}.highlight .gi{color:#a6e22e}/*! + * Font Awesome 4.4.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:FontAwesome;src:url(/assets/fonts/fontawesome-webfont.eot?v=4.4.0);src:url(/assets/fonts/fontawesome-webfont.eot?#iefix&v=4.4.0) format("embedded-opentype"),url(/assets/fonts/fontawesome-webfont.woff2?v=4.4.0) format("woff2"),url(/assets/fonts/fontawesome-webfont.woff?v=4.4.0) format("woff"),url(/assets/fonts/fontawesome-webfont.ttf?v=4.4.0) format("truetype"),url(/assets/fonts/fontawesome-webfont.svg?v=4.4.0#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased}.fa-search:before{content:""}.fa-heart:before{content:""}.fa-calendar:before{content:""}.fa-comment:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-comments:before{content:""}.fa-linkedin-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-calendar-o:before{content:""}.fa-instagram:before{content:""}@media (min-width:480px){.hero-inner .button-ghost{margin:0 .2em;width:auto;display:inline-block}}@media screen and (min-width:800px){#swipebox-close{right:10px}#swipebox-arrows{width:92%;max-width:800px}}@media (min-width:1024px){.wrapper{max-width:1024px}.header{padding:2em 1em}.navbar .search span{display:inline-block}.hero-inner{padding:0 2em}.hero-inner h1 strong{font-size:3.5rem;letter-spacing:-2px;line-height:1.35}.hero-inner h1{font-size:2.125rem}.post-title{font-size:1.875rem}.pagination a,.pagination li,.pagination span{width:auto;display:inline-block}}@media (min-width:1280px){.footer,.header{position:fixed;left:0}.wrapper{margin-left:22em;padding:4em}.header{height:100%;width:22em;padding:2em;top:0}.header .author-thumb{margin:0 0 2em}.header h1{font-size:1.25rem;float:none}.navbar{padding:1em;width:100%}.navbar li{margin:0 0 .3em;display:block;width:100%;font-size:1.2rem;text-align:center}.footer p{padding-left:6em;padding-right:6em}.footer{background-color:transparent;width:22em;padding:0 1em 1em;bottom:0}.footer .social,.footer span{margin:0}.hero-inner h1 strong{font-size:4.5rem}.hero-inner h1{font-size:2.25rem}.pagination{margin:4em auto 0}}@media (min-width:1800px){.footer,.header{width:32em}.wrapper{max-width:1024px;margin-left:32em}.header{padding:6em 4em}.header h1{font-size:1.625rem}.hero-inner h1 strong{font-size:5.375rem}}@media screen and (max-width:1280px){.post-footer .author,.post-footer .author-thumb,.post-footer .share{float:none;padding:0;margin:0;position:relative;text-align:center;clear:both}.post-footer .share{top:auto;right:auto;margin:2.8em auto 0}.post-footer .author-thumb{display:inline;margin-bottom:1em}}@media screen and (max-width:1024px){.modal-search-close{top:-20px}.search-label{display:none;visibility:hidden}.modal-search-container .form-group i{top:15px;right:15px}.modal-search-container input[type=text]{font-size:1.25rem}.modal-search-container{padding:3.2em 2em}.search-results a{font-size:1rem}.search-results a span{float:none}.search-results a small{display:none}}@media screen and (max-width:480px){.btn,.button,.button-ghost,.button-secondary{width:100%;clear:both}.pagination ul{display:block}}@-webkit-keyframes bounce-right{0%{opacity:.2;-webkit-transform:translateX(-200px);transform:translateX(-200px)}60%{opacity:.7;-webkit-transform:translateX(15px);transform:translateX(15px)}100%{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes bounce-right{0%{opacity:.2;-webkit-transform:translateX(-200px);transform:translateX(-200px)}60%{opacity:.7;-webkit-transform:translateX(15px);transform:translateX(15px)}100%{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes bounce-left{0%{opacity:.2;-webkit-transform:translateX(200px);transform:translateX(200px)}60%{opacity:.7;-webkit-transform:translateX(-15px);transform:translateX(-15px)}100%{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes bounce-left{0%{opacity:.2;-webkit-transform:translateX(200px);transform:translateX(200px)}60%{opacity:.7;-webkit-transform:translateX(-15px);transform:translateX(-15px)}100%{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes bounce-rotate{0%{opacity:.2;-webkit-transform:perspective(800px) rotateX(-80deg);transform:perspective(800px) rotateX(-80deg)}20%{opacity:1}60%{-webkit-transform:perspective(800px) rotateX(20deg);transform:perspective(800px) rotateX(20deg)}100%{opacity:1;-webkit-transform:perspective(800px) rotateX(0);transform:perspective(800px) rotateX(0)}}@keyframes bounce-rotate{0%{opacity:.2;-webkit-transform:perspective(800px) rotateX(-80deg);transform:perspective(800px) rotateX(-80deg)}20%{opacity:1}60%{-webkit-transform:perspective(800px) rotateX(20deg);transform:perspective(800px) rotateX(20deg)}100%{opacity:1;-webkit-transform:perspective(800px) rotateX(0);transform:perspective(800px) rotateX(0)}}@-webkit-keyframes fade-in-up{from{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fade-in-up{from{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{opacity:1;-webkit-transform:none;transform:none}}@-webkit-keyframes fadeIn{from{opacity:0}to{opacity:1}}@keyframes fadeIn{from{opacity:0}to{opacity:1}}@-webkit-keyframes tada{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg);transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg)}}@keyframes tada{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg);transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg)}}@-webkit-keyframes anim-open{0%{opacity:0;-webkit-transform:scale3d(1.1,1.1,1);transform:scale3d(1.1,1.1,1)}100%{opacity:1;-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes anim-open{0%{opacity:0;-webkit-transform:scale3d(1.1,1.1,1);transform:scale3d(1.1,1.1,1)}100%{opacity:1;-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@-webkit-keyframes anim-close{0%{opacity:1}100%{opacity:0;-webkit-transform:scale3d(.9,.9,1);transform:scale3d(.9,.9,1)}}@keyframes anim-close{0%{opacity:1}100%{opacity:0;-webkit-transform:scale3d(.9,.9,1);transform:scale3d(.9,.9,1)}}@-webkit-keyframes selectionSharerPopover-animation{0%{-webkit-transform:matrix(.97,0,0,1,0,12);transform:matrix(.97,0,0,1,0,12);filter:alpha(opacity=0);opacity:0}20%{-webkit-transform:matrix(.99,0,0,1,0,2);transform:matrix(.99,0,0,1,0,2);filter:alpha(opacity=70);opacity:.7}40%{-webkit-transform:matrix(1,0,0,1,0,-1);transform:matrix(1,0,0,1,0,-1);filter:alpha(opacity=100);opacity:1}100%,70%{-webkit-transform:matrix(1,0,0,1,0,0);transform:matrix(1,0,0,1,0,0);filter:alpha(opacity=100);opacity:1}}@keyframes selectionSharerPopover-animation{0%{-webkit-transform:matrix(.97,0,0,1,0,12);transform:matrix(.97,0,0,1,0,12);filter:alpha(opacity=0);opacity:0}20%{-webkit-transform:matrix(.99,0,0,1,0,2);transform:matrix(.99,0,0,1,0,2);filter:alpha(opacity=70);opacity:.7}40%{-webkit-transform:matrix(1,0,0,1,0,-1);transform:matrix(1,0,0,1,0,-1);filter:alpha(opacity=100);opacity:1}100%,70%{-webkit-transform:matrix(1,0,0,1,0,0);transform:matrix(1,0,0,1,0,0);filter:alpha(opacity=100);opacity:1}}@-webkit-keyframes rightSpring{0%,100%{left:0}50%{left:-30px}}@keyframes rightSpring{0%,100%{left:0}50%{left:-30px}}@-webkit-keyframes leftSpring{0%,100%{left:0}50%{left:30px}}@keyframes leftSpring{0%,100%{left:0}50%{left:30px}} \ No newline at end of file diff --git a/assets/fonts/Entypo-webfont.eot b/assets/fonts/Entypo-webfont.eot new file mode 100755 index 00000000..a754415a Binary files /dev/null and b/assets/fonts/Entypo-webfont.eot differ diff --git a/assets/fonts/Entypo-webfont.svg b/assets/fonts/Entypo-webfont.svg new file mode 100755 index 00000000..0bdb76b3 --- /dev/null +++ b/assets/fonts/Entypo-webfont.svg @@ -0,0 +1,141 @@ + + + + +This is a custom SVG webfont generated by Font Squirrel. +Copyright : Creative Commons CC BYSA 2012 +Designer : Daniel Bruce +Foundry : Daniel Bruce +Foundry URL : wwwdanielbrucese + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/assets/fonts/Entypo-webfont.ttf b/assets/fonts/Entypo-webfont.ttf new file mode 100755 index 00000000..25438bd1 Binary files /dev/null and b/assets/fonts/Entypo-webfont.ttf differ diff --git a/assets/fonts/Entypo-webfont.woff b/assets/fonts/Entypo-webfont.woff new file mode 100755 index 00000000..b859168e Binary files /dev/null and b/assets/fonts/Entypo-webfont.woff differ diff --git a/assets/fonts/FontAwesome.otf b/assets/fonts/FontAwesome.otf new file mode 100755 index 00000000..f7936cc1 Binary files /dev/null and b/assets/fonts/FontAwesome.otf differ diff --git a/assets/fonts/casper-icons.eot b/assets/fonts/casper-icons.eot new file mode 100755 index 00000000..0bfce348 Binary files /dev/null and b/assets/fonts/casper-icons.eot differ diff --git a/assets/fonts/casper-icons.svg b/assets/fonts/casper-icons.svg new file mode 100755 index 00000000..98efd055 --- /dev/null +++ b/assets/fonts/casper-icons.svg @@ -0,0 +1,19 @@ + + + +Generated by IcoMoon + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/assets/fonts/casper-icons.ttf b/assets/fonts/casper-icons.ttf new file mode 100755 index 00000000..f1b8da86 Binary files /dev/null and b/assets/fonts/casper-icons.ttf differ diff --git a/assets/fonts/casper-icons.woff b/assets/fonts/casper-icons.woff new file mode 100755 index 00000000..4a988939 Binary files /dev/null and b/assets/fonts/casper-icons.woff differ diff --git a/assets/fonts/fontawesome-webfont.eot b/assets/fonts/fontawesome-webfont.eot new file mode 100755 index 00000000..33b2bb80 Binary files /dev/null and b/assets/fonts/fontawesome-webfont.eot differ diff --git a/assets/fonts/fontawesome-webfont.svg b/assets/fonts/fontawesome-webfont.svg new file mode 100755 index 00000000..1ee89d43 --- /dev/null +++ b/assets/fonts/fontawesome-webfont.svg @@ -0,0 +1,565 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/assets/fonts/fontawesome-webfont.ttf b/assets/fonts/fontawesome-webfont.ttf new file mode 100755 index 00000000..ed9372f8 Binary files /dev/null and b/assets/fonts/fontawesome-webfont.ttf differ diff --git a/assets/fonts/fontawesome-webfont.woff b/assets/fonts/fontawesome-webfont.woff new file mode 100755 index 00000000..8b280b98 Binary files /dev/null and b/assets/fonts/fontawesome-webfont.woff differ diff --git a/assets/fonts/fontawesome-webfont.woff2 b/assets/fonts/fontawesome-webfont.woff2 new file mode 100755 index 00000000..3311d585 Binary files /dev/null and b/assets/fonts/fontawesome-webfont.woff2 differ diff --git a/assets/fonts/fontcustom_cb066050d5b786186aa0e7f121427d8b.eot b/assets/fonts/fontcustom_cb066050d5b786186aa0e7f121427d8b.eot new file mode 100755 index 00000000..ecd47170 Binary files /dev/null and b/assets/fonts/fontcustom_cb066050d5b786186aa0e7f121427d8b.eot differ diff --git a/assets/fonts/fontcustom_cb066050d5b786186aa0e7f121427d8b.svg b/assets/fonts/fontcustom_cb066050d5b786186aa0e7f121427d8b.svg new file mode 100755 index 00000000..1e510f7a --- /dev/null +++ b/assets/fonts/fontcustom_cb066050d5b786186aa0e7f121427d8b.svg @@ -0,0 +1,50 @@ + + + + + +Created by FontForge 20120731 at Thu May 22 15:12:55 2014 + By Wes Bos +Created by Wes Bos with FontForge 2.0 (http://fontforge.sf.net) + + + + + + + + diff --git a/assets/fonts/fontcustom_cb066050d5b786186aa0e7f121427d8b.ttf b/assets/fonts/fontcustom_cb066050d5b786186aa0e7f121427d8b.ttf new file mode 100755 index 00000000..ccfad217 Binary files /dev/null and b/assets/fonts/fontcustom_cb066050d5b786186aa0e7f121427d8b.ttf differ diff --git a/assets/fonts/fontcustom_cb066050d5b786186aa0e7f121427d8b.woff b/assets/fonts/fontcustom_cb066050d5b786186aa0e7f121427d8b.woff new file mode 100755 index 00000000..07dee022 Binary files /dev/null and b/assets/fonts/fontcustom_cb066050d5b786186aa0e7f121427d8b.woff differ diff --git a/assets/images/author.png b/assets/images/author.png new file mode 100644 index 00000000..effc32a6 Binary files /dev/null and b/assets/images/author.png differ diff --git a/assets/images/close.svg b/assets/images/close.svg new file mode 100755 index 00000000..e923ffba --- /dev/null +++ b/assets/images/close.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/images/danger_bot_use_case_screenshot_1.png b/assets/images/danger_bot_use_case_screenshot_1.png new file mode 100644 index 00000000..f29011be Binary files /dev/null and b/assets/images/danger_bot_use_case_screenshot_1.png differ diff --git a/assets/images/danger_bot_use_case_screenshot_2.png b/assets/images/danger_bot_use_case_screenshot_2.png new file mode 100644 index 00000000..71e380c2 Binary files /dev/null and b/assets/images/danger_bot_use_case_screenshot_2.png differ diff --git a/assets/images/danger_bot_use_case_screenshot_3.png b/assets/images/danger_bot_use_case_screenshot_3.png new file mode 100644 index 00000000..0daae20e Binary files /dev/null and b/assets/images/danger_bot_use_case_screenshot_3.png differ diff --git a/assets/images/danger_bot_use_case_screenshot_4.png b/assets/images/danger_bot_use_case_screenshot_4.png new file mode 100644 index 00000000..78055c5d Binary files /dev/null and b/assets/images/danger_bot_use_case_screenshot_4.png differ diff --git a/assets/images/danger_bot_use_case_screenshot_5.png b/assets/images/danger_bot_use_case_screenshot_5.png new file mode 100644 index 00000000..326f63f9 Binary files /dev/null and b/assets/images/danger_bot_use_case_screenshot_5.png differ diff --git a/assets/images/danger_bot_use_case_screenshot_6.png b/assets/images/danger_bot_use_case_screenshot_6.png new file mode 100644 index 00000000..ee011bbe Binary files /dev/null and b/assets/images/danger_bot_use_case_screenshot_6.png differ diff --git a/assets/images/danger_bot_use_case_screenshot_7.png b/assets/images/danger_bot_use_case_screenshot_7.png new file mode 100644 index 00000000..6f466869 Binary files /dev/null and b/assets/images/danger_bot_use_case_screenshot_7.png differ diff --git a/assets/images/ico/android-icon-144x144.png b/assets/images/ico/android-icon-144x144.png new file mode 100755 index 00000000..babbfa18 Binary files /dev/null and b/assets/images/ico/android-icon-144x144.png differ diff --git a/assets/images/ico/android-icon-192x192.png b/assets/images/ico/android-icon-192x192.png new file mode 100755 index 00000000..d6575612 Binary files /dev/null and b/assets/images/ico/android-icon-192x192.png differ diff --git a/assets/images/ico/android-icon-36x36.png b/assets/images/ico/android-icon-36x36.png new file mode 100755 index 00000000..7d2b61f1 Binary files /dev/null and b/assets/images/ico/android-icon-36x36.png differ diff --git a/assets/images/ico/android-icon-48x48.png b/assets/images/ico/android-icon-48x48.png new file mode 100755 index 00000000..20899672 Binary files /dev/null and b/assets/images/ico/android-icon-48x48.png differ diff --git a/assets/images/ico/android-icon-72x72.png b/assets/images/ico/android-icon-72x72.png new file mode 100755 index 00000000..2a15b5ad Binary files /dev/null and b/assets/images/ico/android-icon-72x72.png differ diff --git a/assets/images/ico/android-icon-96x96.png b/assets/images/ico/android-icon-96x96.png new file mode 100755 index 00000000..0b30e017 Binary files /dev/null and b/assets/images/ico/android-icon-96x96.png differ diff --git a/assets/images/ico/apple-icon-114x114.png b/assets/images/ico/apple-icon-114x114.png new file mode 100755 index 00000000..f2cedb79 Binary files /dev/null and b/assets/images/ico/apple-icon-114x114.png differ diff --git a/assets/images/ico/apple-icon-120x120.png b/assets/images/ico/apple-icon-120x120.png new file mode 100755 index 00000000..5b793b01 Binary files /dev/null and b/assets/images/ico/apple-icon-120x120.png differ diff --git a/assets/images/ico/apple-icon-144x144.png b/assets/images/ico/apple-icon-144x144.png new file mode 100755 index 00000000..babbfa18 Binary files /dev/null and b/assets/images/ico/apple-icon-144x144.png differ diff --git a/assets/images/ico/apple-icon-152x152.png b/assets/images/ico/apple-icon-152x152.png new file mode 100755 index 00000000..4e9f50e5 Binary files /dev/null and b/assets/images/ico/apple-icon-152x152.png differ diff --git a/assets/images/ico/apple-icon-180x180.png b/assets/images/ico/apple-icon-180x180.png new file mode 100755 index 00000000..2fa81630 Binary files /dev/null and b/assets/images/ico/apple-icon-180x180.png differ diff --git a/assets/images/ico/apple-icon-57x57.png b/assets/images/ico/apple-icon-57x57.png new file mode 100755 index 00000000..505bf397 Binary files /dev/null and b/assets/images/ico/apple-icon-57x57.png differ diff --git a/assets/images/ico/apple-icon-60x60.png b/assets/images/ico/apple-icon-60x60.png new file mode 100755 index 00000000..5f6aa9f2 Binary files /dev/null and b/assets/images/ico/apple-icon-60x60.png differ diff --git a/assets/images/ico/apple-icon-72x72.png b/assets/images/ico/apple-icon-72x72.png new file mode 100755 index 00000000..2a15b5ad Binary files /dev/null and b/assets/images/ico/apple-icon-72x72.png differ diff --git a/assets/images/ico/apple-icon-76x76.png b/assets/images/ico/apple-icon-76x76.png new file mode 100755 index 00000000..e5647004 Binary files /dev/null and b/assets/images/ico/apple-icon-76x76.png differ diff --git a/assets/images/ico/apple-icon-precomposed.png b/assets/images/ico/apple-icon-precomposed.png new file mode 100755 index 00000000..d2cd5418 Binary files /dev/null and b/assets/images/ico/apple-icon-precomposed.png differ diff --git a/assets/images/ico/apple-icon.png b/assets/images/ico/apple-icon.png new file mode 100755 index 00000000..d2cd5418 Binary files /dev/null and b/assets/images/ico/apple-icon.png differ diff --git a/assets/images/ico/browserconfig.xml b/assets/images/ico/browserconfig.xml new file mode 100755 index 00000000..c5541482 --- /dev/null +++ b/assets/images/ico/browserconfig.xml @@ -0,0 +1,2 @@ + +#ffffff \ No newline at end of file diff --git a/assets/images/ico/favicon-16x16.png b/assets/images/ico/favicon-16x16.png new file mode 100755 index 00000000..3bcc3d7d Binary files /dev/null and b/assets/images/ico/favicon-16x16.png differ diff --git a/assets/images/ico/favicon-32x32.png b/assets/images/ico/favicon-32x32.png new file mode 100755 index 00000000..2ad2f236 Binary files /dev/null and b/assets/images/ico/favicon-32x32.png differ diff --git a/assets/images/ico/favicon-96x96.png b/assets/images/ico/favicon-96x96.png new file mode 100755 index 00000000..0b30e017 Binary files /dev/null and b/assets/images/ico/favicon-96x96.png differ diff --git a/assets/images/ico/favicon.ico b/assets/images/ico/favicon.ico new file mode 100755 index 00000000..4b02334b Binary files /dev/null and b/assets/images/ico/favicon.ico differ diff --git a/assets/images/ico/favicon.png b/assets/images/ico/favicon.png new file mode 100755 index 00000000..4b02334b Binary files /dev/null and b/assets/images/ico/favicon.png differ diff --git a/assets/images/ico/manifest.json b/assets/images/ico/manifest.json new file mode 100755 index 00000000..5300f2cf --- /dev/null +++ b/assets/images/ico/manifest.json @@ -0,0 +1,41 @@ +{ + "name": "App", + "icons": [ + { + "src": "\/assets\/images\/ico\/android-icon-36x36.png", + "sizes": "36x36", + "type": "image\/png", + "density": "0.75" + }, + { + "src": "\/assets\/images\/ico\/android-icon-48x48.png", + "sizes": "48x48", + "type": "image\/png", + "density": "1.0" + }, + { + "src": "\/assets\/images\/ico\/android-icon-72x72.png", + "sizes": "72x72", + "type": "image\/png", + "density": "1.5" + }, + { + "src": "\/assets\/images\/ico\/android-icon-96x96.png", + "sizes": "96x96", + "type": "image\/png", + "density": "2.0" + }, + { + "src": "\/assets\/images\/ico\/android-icon-144x144.png", + "sizes": "144x144", + "type": "image\/png", + "density": "3.0" + }, + { + "src": "\/assets\/images\/ico\/android-icon-192x192.png", + "sizes": "192x192", + "type": "image\/png", + "density": "4.0" + } + ] +} \ No newline at end of file diff --git a/assets/images/ico/ms-icon-144x144.png b/assets/images/ico/ms-icon-144x144.png new file mode 100755 index 00000000..babbfa18 Binary files /dev/null and b/assets/images/ico/ms-icon-144x144.png differ diff --git a/assets/images/ico/ms-icon-150x150.png b/assets/images/ico/ms-icon-150x150.png new file mode 100755 index 00000000..f2e02194 Binary files /dev/null and b/assets/images/ico/ms-icon-150x150.png differ diff --git a/assets/images/ico/ms-icon-310x310.png b/assets/images/ico/ms-icon-310x310.png new file mode 100755 index 00000000..2be29466 Binary files /dev/null and b/assets/images/ico/ms-icon-310x310.png differ diff --git a/assets/images/ico/ms-icon-70x70.png b/assets/images/ico/ms-icon-70x70.png new file mode 100755 index 00000000..c3a3ddba Binary files /dev/null and b/assets/images/ico/ms-icon-70x70.png differ diff --git a/assets/images/icons.png b/assets/images/icons.png new file mode 100755 index 00000000..d6333135 Binary files /dev/null and b/assets/images/icons.png differ diff --git a/assets/images/icons.svg b/assets/images/icons.svg new file mode 100755 index 00000000..150f8240 --- /dev/null +++ b/assets/images/icons.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/images/loader.gif b/assets/images/loader.gif new file mode 100755 index 00000000..a82c2aa4 Binary files /dev/null and b/assets/images/loader.gif differ diff --git a/assets/js/main.js b/assets/js/main.js new file mode 100755 index 00000000..0b4a7528 --- /dev/null +++ b/assets/js/main.js @@ -0,0 +1,9 @@ +!function(e,t,n){"use strict";function r(e){return function(){var t,n=arguments[0];for(t="["+(e?e+":":"")+n+"] http://errors.angularjs.org/1.4.8/"+(e?e+"/":"")+n,n=1;n=0&&t-1 in e||"function"==typeof e.item)}function o(e,t,n){var r,s;if(e)if(E(e))for(r in e)"prototype"==r||"length"==r||"name"==r||e.hasOwnProperty&&!e.hasOwnProperty(r)||t.call(n,e[r],r,e);else if(nr(e)||i(e)){var a="object"!=typeof e;for(r=0,s=e.length;s>r;r++)(a||r in e)&&t.call(n,e[r],r,e)}else if(e.forEach&&e.forEach!==o)e.forEach(t,n,e);else if(x(e))for(r in e)t.call(n,e[r],r,e);else if("function"==typeof e.hasOwnProperty)for(r in e)e.hasOwnProperty(r)&&t.call(n,e[r],r,e);else for(r in e)zn.call(e,r)&&t.call(n,e[r],r,e);return e}function s(e,t,n){for(var r=Object.keys(e).sort(),i=0;ii;++i){var s=t[i];if(b(s)||E(s))for(var a=Object.keys(s),u=0,l=a.length;l>u;u++){var f=a[u],p=s[f];n&&b(p)?S(p)?e[f]=new Date(p.valueOf()):k(p)?e[f]=new RegExp(p):p.nodeName?e[f]=p.cloneNode(!0):M(p)?e[f]=p.clone():(b(e[f])||(e[f]=nr(p)?[]:{}),c(e[f],[p],!0)):e[f]=p}}return r?e.$$hashKey=r:delete e.$$hashKey,e}function l(e){return c(e,Gn.call(arguments,1),!1)}function f(e){return c(e,Gn.call(arguments,1),!0)}function p(e){return parseInt(e,10)}function d(e,t){return l(Object.create(e),t)}function h(){}function m(e){return e}function g(e){return function(){return e}}function v(e){return E(e.toString)&&e.toString!==Jn}function $(e){return"undefined"==typeof e}function y(e){return"undefined"!=typeof e}function b(e){return null!==e&&"object"==typeof e}function x(e){return null!==e&&"object"==typeof e&&!Kn(e)}function w(e){return"string"==typeof e}function C(e){return"number"==typeof e}function S(e){return"[object Date]"===Jn.call(e)}function E(e){return"function"==typeof e}function k(e){return"[object RegExp]"===Jn.call(e)}function T(e){return e&&e.window===e}function A(e){return e&&e.$evalAsync&&e.$watch}function N(e){return"boolean"==typeof e}function O(e){return e&&C(e.length)&&rr.test(Jn.call(e))}function M(e){return!(!e||!(e.nodeName||e.prop&&e.attr&&e.find))}function j(e){var t={};e=e.split(",");var n;for(n=0;n=0&&e.splice(n,1),n}function q(e,t){function n(e,t){var n,i=t.$$hashKey;if(nr(e)){n=0;for(var o=e.length;o>n;n++)t.push(r(e[n]))}else if(x(e))for(n in e)t[n]=r(e[n]);else if(e&&"function"==typeof e.hasOwnProperty)for(n in e)e.hasOwnProperty(n)&&(t[n]=r(e[n]));else for(n in e)zn.call(e,n)&&(t[n]=r(e[n]));return i?t.$$hashKey=i:delete t.$$hashKey,t}function r(e){if(!b(e))return e;var t=i.indexOf(e);if(-1!==t)return s[t];if(T(e)||A(e))throw Zn("cpws");var r,t=!1;return nr(e)?(r=[],t=!0):O(e)?r=new e.constructor(e):S(e)?r=new Date(e.getTime()):k(e)?(r=new RegExp(e.source,e.toString().match(/[^\/]*$/)[0]),r.lastIndex=e.lastIndex):E(e.cloneNode)?r=e.cloneNode(!0):(r=Object.create(Kn(e)),t=!0),i.push(e),s.push(r),t?n(e,r):r}var i=[],s=[];if(t){if(O(t))throw Zn("cpta");if(e===t)throw Zn("cpi");return nr(t)?t.length=0:o(t,function(e,n){"$$hashKey"!==n&&delete t[n]}),i.push(e),s.push(t),n(e,t)}return r(e)}function V(e,t){if(nr(e)){t=t||[];for(var n=0,r=e.length;r>n;n++)t[n]=e[n]}else if(b(e))for(n in t=t||{},e)("$"!==n.charAt(0)||"$"!==n.charAt(1))&&(t[n]=e[n]);return t||e}function L(e,t){if(e===t)return!0;if(null===e||null===t)return!1;if(e!==e&&t!==t)return!0;var n,r=typeof e;if(r==typeof t&&"object"==r){if(!nr(e)){if(S(e))return S(t)?L(e.getTime(),t.getTime()):!1;if(k(e))return k(t)?e.toString()==t.toString():!1;if(A(e)||A(t)||T(e)||T(t)||nr(t)||S(t)||k(t))return!1;r=ce();for(n in e)if("$"!==n.charAt(0)&&!E(e[n])){if(!L(e[n],t[n]))return!1;r[n]=!0}for(n in t)if(!(n in r)&&"$"!==n.charAt(0)&&y(t[n])&&!E(t[n]))return!1;return!0}if(!nr(t))return!1;if((r=e.length)==t.length){for(n=0;r>n;n++)if(!L(e[n],t[n]))return!1;return!0}}return!1}function F(e,t,n){return e.concat(Gn.call(t,n))}function R(e,t){var n=2").append(e).html();try{return e[0].nodeType===fr?Un(n):n.match(/^(<[^>]+>)/)[1].replace(/^<([\w\-]+)/,function(e,t){return"<"+Un(t)})}catch(r){return Un(n)}}function W(e){try{return decodeURIComponent(e)}catch(t){}}function G(e){var t={};return o((e||"").split("&"),function(e){var n,r,i;e&&(r=e=e.replace(/\+/g,"%20"),n=e.indexOf("="),-1!==n&&(r=e.substring(0,n),i=e.substring(n+1)),r=W(r),y(r)&&(i=y(i)?W(i):!0,zn.call(t,r)?nr(t[r])?t[r].push(i):t[r]=[t[r],i]:t[r]=i))}),t}function X(e){var t=[];return o(e,function(e,n){nr(e)?o(e,function(e){t.push(J(n,!0)+(!0===e?"":"="+J(e,!0)))}):t.push(J(n,!0)+(!0===e?"":"="+J(e,!0)))}),t.length?t.join("&"):""}function Y(e){return J(e,!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+")}function J(e,t){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%3B/gi,";").replace(/%20/g,t?"%20":"+")}function K(e,t){var n,r,i=ur.length;for(r=0;i>r;++r)if(n=ur[r]+t,w(n=e.getAttribute(n)))return n;return null}function Z(e,t){var n,r,i={};o(ur,function(t){t+="app",!n&&e.hasAttribute&&e.hasAttribute(t)&&(n=e,r=e.getAttribute(t))}),o(ur,function(t){t+="app";var i;!n&&(i=e.querySelector("["+t.replace(":","\\:")+"]"))&&(n=i,r=i.getAttribute(t))}),n&&(i.strictDi=null!==K(n,"strict-di"),t(n,r?[r]:[],i))}function Q(n,r,i){b(i)||(i={}),i=l({strictDi:!1},i);var s=function(){if(n=In(n),n.injector()){var e=n[0]===t?"document":z(n);throw Zn("btstrpd",e.replace(//,">"))}return r=r||[],r.unshift(["$provide",function(e){e.value("$rootElement",n)}]),i.debugInfoEnabled&&r.push(["$compileProvider",function(e){e.debugInfoEnabled(!0)}]),r.unshift("ng"),e=Re(r,i.strictDi),e.invoke(["$rootScope","$rootElement","$compile","$injector",function(e,t,n,r){e.$apply(function(){t.data("$injector",r),n(t)(e)})}]),e},a=/^NG_ENABLE_DEBUG_INFO!/,u=/^NG_DEFER_BOOTSTRAP!/;return e&&a.test(e.name)&&(i.debugInfoEnabled=!0,e.name=e.name.replace(a,"")),e&&!u.test(e.name)?s():(e.name=e.name.replace(u,""),Qn.resumeBootstrap=function(e){return o(e,function(e){r.push(e)}),s()},void(E(Qn.resumeDeferredBootstrap)&&Qn.resumeDeferredBootstrap()))}function ee(){e.name="NG_ENABLE_DEBUG_INFO!"+e.name,e.location.reload()}function te(e){if(e=Qn.element(e).injector(),!e)throw Zn("test");return e.get("$$testability")}function ne(e,t){return t=t||"_",e.replace(cr,function(e,n){return(n?t:"")+e.toLowerCase()})}function re(){var t;if(!lr){var r=ar();(Hn=$(r)?e.jQuery:r?e[r]:n)&&Hn.fn.on?(In=Hn,l(Hn.fn,{scope:Er.scope,isolateScope:Er.isolateScope,controller:Er.controller,injector:Er.injector,inheritedData:Er.inheritedData}),t=Hn.cleanData,Hn.cleanData=function(e){var n;if(tr)tr=!1;else for(var r,i=0;null!=(r=e[i]);i++)(n=Hn._data(r,"events"))&&n.$destroy&&Hn(r).triggerHandler("$destroy");t(e)}):In=me,Qn.element=In,lr=!0}}function ie(e,t,n){if(!e)throw Zn("areq",t||"?",n||"required");return e}function oe(e,t,n){return n&&nr(e)&&(e=e[e.length-1]),ie(E(e),t,"not a function, got "+(e&&"object"==typeof e?e.constructor.name||"Object":typeof e)),e}function se(e,t){if("hasOwnProperty"===e)throw Zn("badname",t)}function ae(e,t,n){if(!t)return e;t=t.split(".");for(var r,i=e,o=t.length,s=0;o>s;s++)r=t[s],e&&(e=(i=e)[r]);return!n&&E(e)?R(i,e):e}function ue(e){for(var t,n=e[0],r=e[e.length-1],i=1;n!==r&&(n=n.nextSibling);i++)(t||e[i]!==n)&&(t||(t=In(Gn.call(e,0,i))),t.push(n));return t||e}function ce(){return Object.create(null)}function le(e){function t(e,t,n){return e[t]||(e[t]=n())}var n=r("$injector"),i=r("ng");return e=t(e,"angular",Object),e.$$minErr=e.$$minErr||r,t(e,"module",function(){var e={};return function(r,o,s){if("hasOwnProperty"===r)throw i("badname","module");return o&&e.hasOwnProperty(r)&&(e[r]=null),t(e,r,function(){function e(e,t,n,r){return r||(r=i),function(){return r[n||"push"]([e,t,arguments]),l}}function t(e,t){return function(n,o){return o&&E(o)&&(o.$$moduleName=r),i.push([e,t,arguments]),l}}if(!o)throw n("nomod",r);var i=[],a=[],u=[],c=e("$injector","invoke","push",a),l={_invokeQueue:i,_configBlocks:a,_runBlocks:u,requires:o,name:r,provider:t("$provide","provider"),factory:t("$provide","factory"),service:t("$provide","service"),value:e("$provide","value"),constant:e("$provide","constant","unshift"),decorator:t("$provide","decorator"),animation:t("$animateProvider","register"),filter:t("$filterProvider","register"),controller:t("$controllerProvider","register"),directive:t("$compileProvider","directive"),config:c,run:function(e){return u.push(e),this}};return s&&c(s),l})}})}function fe(t){l(t,{bootstrap:Q,copy:q,extend:l,merge:f,equals:L,element:In,forEach:o,injector:Re,noop:h,bind:R,toJson:H,fromJson:B,identity:m,isUndefined:$,isDefined:y,isString:w,isFunction:E,isObject:b,isNumber:C,isElement:M,isArray:nr,version:pr,isDate:S,lowercase:Un,uppercase:Wn,callbacks:{counter:0},getTestability:te,$$minErr:r,$$csp:sr,reloadWithDebugInfo:ee}),(Bn=le(e))("ng",["ngLocale"],["$provide",function(e){e.provider({$$sanitizeUri:Yt}),e.provider("$compile",Xe).directive({a:Ci,input:Ri,textarea:Ri,form:Ti,script:Ao,select:Mo,style:Do,option:jo,ngBind:Bi,ngBindHtml:Ui,ngBindTemplate:_i,ngClass:Wi,ngClassEven:Xi,ngClassOdd:Gi,ngCloak:Yi,ngController:Ji,ngForm:Ai,ngHide:wo,ngIf:Qi,ngInclude:eo,ngInit:no,ngNonBindable:mo,ngPluralize:yo,ngRepeat:bo,ngShow:xo,ngStyle:Co,ngSwitch:So,ngSwitchWhen:Eo,ngSwitchDefault:ko,ngOptions:$o,ngTransclude:To,ngModel:fo,ngList:ro,ngChange:zi,pattern:qo,ngPattern:qo,required:Po,ngRequired:Po,minlength:Lo,ngMinlength:Lo,maxlength:Vo,ngMaxlength:Vo,ngValue:Hi,ngModelOptions:ho}).directive({ngInclude:to}).directive(Si).directive(Ki),e.provider({$anchorScroll:Ie,$animate:Fr,$animateCss:Rr,$$animateQueue:Lr,$$AnimateRunner:Vr,$browser:ze,$cacheFactory:We,$controller:Ze,$document:Qe,$exceptionHandler:et,$filter:ln,$$forceReflow:Ur,$interpolate:pt,$interval:dt,$http:ut,$httpParamSerializer:nt,$httpParamSerializerJQLike:rt,$httpBackend:lt,$xhrFactory:ct,$location:Et,$log:kt,$parse:_t,$rootScope:Xt,$q:Ut,$$q:zt,$sce:Qt,$sceDelegate:Zt,$sniffer:en,$templateCache:Ge,$templateRequest:tn,$$testability:nn,$timeout:rn,$window:an,$$rAF:Gt,$$jqLite:qe,$$HashMap:Nr,$$cookieReader:cn})}])}function pe(e){return e.replace(mr,function(e,t,n,r){return r?n.toUpperCase():n}).replace(gr,"Moz$1")}function de(e){return e=e.nodeType,1===e||!e||9===e}function he(e,t){var n,r,i=t.createDocumentFragment(),s=[];if(br.test(e)){for(n=n||i.appendChild(t.createElement("div")),r=(xr.exec(e)||["",""])[1].toLowerCase(),r=Cr[r]||Cr._default,n.innerHTML=r[1]+e.replace(wr,"<$1>")+r[2],r=r[0];r--;)n=n.lastChild;s=F(s,n.childNodes),n=i.firstChild,n.textContent=""}else s.push(t.createTextNode(e));return i.textContent="",i.innerHTML="",o(s,function(e){i.appendChild(e)}),i}function me(e){if(e instanceof me)return e;var n;if(w(e)&&(e=ir(e),n=!0),!(this instanceof me)){if(n&&"<"!=e.charAt(0))throw $r("nosel");return new me(e)}if(n){n=t;var r;e=(r=yr.exec(e))?[n.createElement(r[1])]:(r=he(e,n))?r.childNodes:[]}Ee(this,e)}function ge(e){return e.cloneNode(!0)}function ve(e,t){if(t||ye(e),e.querySelectorAll)for(var n=e.querySelectorAll("*"),r=0,i=n.length;i>r;r++)ye(n[r])}function $e(e,t,n,r){if(y(r))throw $r("offargs");var i=(r=be(e))&&r.events,s=r&&r.handle;if(s)if(t){var a=function(t){var r=i[t];y(n)&&P(r||[],n),y(n)&&r&&0r;r++)e[e.length++]=t[r]}else e[e.length++]=t}}function ke(e,t){return Te(e,"$"+(t||"ngController")+"Controller")}function Te(e,t,n){for(9==e.nodeType&&(e=e.documentElement),t=nr(t)?t:[t];e;){for(var r=0,i=t.length;i>r;r++)if(y(n=In.data(e,t[r])))return n;e=e.parentNode||11===e.nodeType&&e.host}}function Ae(e){for(ve(e,!0);e.firstChild;)e.removeChild(e.firstChild)}function Ne(e,t){t||ve(e);var n=e.parentNode;n&&n.removeChild(e)}function Oe(t,n){n=n||e,"complete"===n.document.readyState?n.setTimeout(t):In(n).on("load",t)}function Me(e,t){var n=kr[t.toLowerCase()];return n&&Tr[D(e)]&&n}function je(e,t){var n=function(n,r){n.isDefaultPrevented=function(){return n.defaultPrevented};var i=t[r||n.type],o=i?i.length:0;if(o){if($(n.immediatePropagationStopped)){var s=n.stopImmediatePropagation;n.stopImmediatePropagation=function(){n.immediatePropagationStopped=!0,n.stopPropagation&&n.stopPropagation(),s&&s.call(n)}}n.isImmediatePropagationStopped=function(){return!0===n.immediatePropagationStopped};var a=i.specialHandlerWrapper||De;o>1&&(i=V(i));for(var u=0;o>u;u++)n.isImmediatePropagationStopped()||a(e,n,i[u])}};return n.elem=e,n}function De(e,t,n){n.call(e,t)}function Pe(e,t,n){var r=t.relatedTarget;r&&(r===e||Sr.call(e,r))||n.call(e,t)}function qe(){this.$get=function(){return l(me,{hasClass:function(e,t){return e.attr&&(e=e[0]),we(e,t)},addClass:function(e,t){return e.attr&&(e=e[0]),Se(e,t)},removeClass:function(e,t){return e.attr&&(e=e[0]),Ce(e,t)}})}}function Ve(e,t){var n=e&&e.$$hashKey;return n?("function"==typeof n&&(n=e.$$hashKey()),n):(n=typeof e,n="function"==n||"object"==n&&null!==e?e.$$hashKey=n+":"+(t||u)():n+":"+e)}function Le(e,t){if(t){var n=0;this.nextUid=function(){return++n}}o(e,this.put,this)}function Fe(e){return(e=e.toString().replace(Dr,"").match(Or))?"function("+(e[1]||"").replace(/[\s\r\n]+/," ")+")":"fn"}function Re(e,t){function r(e){return function(t,n){return b(t)?void o(t,a(e)):e(t,n)}}function i(e,t){if(se(e,"service"),(E(t)||nr(t))&&(t=m.instantiate(t)),!t.$get)throw Pr("pget",e);return h[e+"Provider"]=t}function s(e,t){return function(){var n=y.invoke(t,this);if($(n))throw Pr("undef",e);return n}}function u(e,t,n){return i(e,{$get:!1!==n?s(e,t):t})}function c(e){ie($(e)||nr(e),"modulesToLoad","not an array");var t,n=[];return o(e,function(e){function r(e){var t,n;for(t=0,n=e.length;n>t;t++){var r=e[t],i=m.get(r[0]);i[r[1]].apply(i,r[2])}}if(!d.get(e)){d.put(e,!0);try{w(e)?(t=Bn(e),n=n.concat(c(t.requires)).concat(t._runBlocks),r(t._invokeQueue),r(t._configBlocks)):E(e)?n.push(m.invoke(e)):nr(e)?n.push(m.invoke(e)):oe(e,"module")}catch(i){throw nr(e)&&(e=e[e.length-1]),i.message&&i.stack&&-1==i.stack.indexOf(i.message)&&(i=i.message+"\n"+i.stack),Pr("modulerr",e,i.stack||i.message||i)}}}),n}function l(e,n){function r(t,r){if(e.hasOwnProperty(t)){if(e[t]===f)throw Pr("cdep",t+" <- "+p.join(" <- "));return e[t]}try{return p.unshift(t),e[t]=f,e[t]=n(t,r)}catch(i){throw e[t]===f&&delete e[t],i}finally{p.shift()}}function i(e,n,i,o){"string"==typeof i&&(o=i,i=null);var s,a,u,c=[],l=Re.$$annotate(e,t,o);for(a=0,s=l.length;s>a;a++){if(u=l[a],"string"!=typeof u)throw Pr("itkn",u);c.push(i&&i.hasOwnProperty(u)?i[u]:r(u,o))}return nr(e)&&(e=e[s]),e.apply(n,c)}return{invoke:i,instantiate:function(e,t,n){var r=Object.create((nr(e)?e[e.length-1]:e).prototype||null);return e=i(e,r,t,n),b(e)||E(e)?e:r},get:r,annotate:Re.$$annotate,has:function(t){return h.hasOwnProperty(t+"Provider")||e.hasOwnProperty(t)}}}t=!0===t;var f={},p=[],d=new Le([],!0),h={$provide:{provider:r(i),factory:r(u),service:r(function(e,t){return u(e,["$injector",function(e){return e.instantiate(t)}])}),value:r(function(e,t){return u(e,g(t),!1)}),constant:r(function(e,t){se(e,"constant"),h[e]=t,v[e]=t}),decorator:function(e,t){var n=m.get(e+"Provider"),r=n.$get;n.$get=function(){var e=y.invoke(r,n);return y.invoke(t,null,{$delegate:e})}}}},m=h.$injector=l(h,function(e,t){throw Qn.isString(t)&&p.push(t),Pr("unpr",p.join(" <- "))}),v={},y=v.$injector=l(v,function(e,t){var r=m.get(e+"Provider",t);return y.invoke(r.$get,r,n,e)});return o(c(e),function(e){e&&y.invoke(e)}),y}function Ie(){var e=!0;this.disableAutoScrolling=function(){e=!1},this.$get=["$window","$location","$rootScope",function(t,n,r){function i(e){var t=null;return Array.prototype.some.call(e,function(e){return"a"===D(e)?(t=e,!0):void 0}),t}function o(e){if(e){e.scrollIntoView();var n;n=s.yOffset,E(n)?n=n():M(n)?(n=n[0],n="fixed"!==t.getComputedStyle(n).position?0:n.getBoundingClientRect().bottom):C(n)||(n=0),n&&(e=e.getBoundingClientRect().top,t.scrollBy(0,e-n))}else t.scrollTo(0,0)}function s(e){e=w(e)?e:n.hash();var t;e?(t=a.getElementById(e))?o(t):(t=i(a.getElementsByName(e)))?o(t):"top"===e&&o(null):o(null)}var a=t.document;return e&&r.$watch(function(){return n.hash()},function(e,t){e===t&&""===e||Oe(function(){r.$evalAsync(s)})}),s}]}function He(e,t){return e||t?e?t?(nr(e)&&(e=e.join(" ")),nr(t)&&(t=t.join(" ")),e+" "+t):e:t:""}function Be(e){w(e)&&(e=e.split(" "));var t=ce();return o(e,function(e){e.length&&(t[e]=!0)}),t}function _e(e){return b(e)?e:{}}function Ue(e,t,n,r){function i(e){try{e.apply(null,Gn.call(arguments,1))}finally{if(g--,0===g)for(;v.length;)try{v.pop()()}catch(t){n.error(t)}}}function s(){C=null,a(),u()}function a(){e:{try{y=f.state;break e}catch(e){}y=void 0}y=$(y)?null:y,L(y,k)&&(y=k),k=y}function u(){(x!==c.url()||b!==y)&&(x=c.url(),b=y,o(S,function(e){e(c.url(),y)}))}var c=this,l=e.location,f=e.history,p=e.setTimeout,d=e.clearTimeout,m={};c.isMock=!1;var g=0,v=[];c.$$completeOutstandingRequest=i,c.$$incOutstandingRequestCount=function(){g++},c.notifyWhenNoOutstandingRequests=function(e){0===g?e():v.push(e)};var y,b,x=l.href,w=t.find("base"),C=null;a(),b=y,c.url=function(t,n,i){if($(i)&&(i=null),l!==e.location&&(l=e.location),f!==e.history&&(f=e.history),t){var o=b===i;if(x===t&&(!r.history||o))return c;var s=x&&$t(x)===$t(t);return x=t,b=i,!r.history||s&&o?((!s||C)&&(C=t),n?l.replace(t):s?(n=l,i=t.indexOf("#"),i=-1===i?"":t.substr(i),n.hash=i):l.href=t,l.href!==t&&(C=t)):(f[n?"replaceState":"pushState"](i,"",t),a(),b=y),c}return C||l.href.replace(/%27/g,"'")},c.state=function(){return y};var S=[],E=!1,k=null;c.onUrlChange=function(t){return E||(r.history&&In(e).on("popstate",s),In(e).on("hashchange",s),E=!0),S.push(t),t},c.$$applicationDestroyed=function(){In(e).off("hashchange popstate",s)},c.$$checkUrlChange=u,c.baseHref=function(){var e=w.attr("href");return e?e.replace(/^(https?\:)?\/\/[^\/]*/,""):""},c.defer=function(e,t){var n;return g++,n=p(function(){delete m[n],i(e)},t||0),m[n]=!0,n},c.defer.cancel=function(e){return m[e]?(delete m[e],d(e),i(h),!0):!1}}function ze(){this.$get=["$window","$log","$sniffer","$document",function(e,t,n,r){return new Ue(e,r,t,n)}]}function We(){this.$get=function(){function e(e,n){function i(e){e!=p&&(d?d==e&&(d=e.n):d=e,o(e.n,e.p),o(e,p),p=e,p.n=null)}function o(e,t){e!=t&&(e&&(e.p=t),t&&(t.n=e))}if(e in t)throw r("$cacheFactory")("iid",e);var s=0,a=l({},n,{id:e}),u=ce(),c=n&&n.capacity||Number.MAX_VALUE,f=ce(),p=null,d=null;return t[e]={put:function(e,t){if(!$(t)){if(cc&&this.remove(d.key),t}},get:function(e){if(c").parent()[0])});var s=j(e,t,e,n,r,i);M.$$addScopeClass(e);var a=null;return function(t,n,r){ie(t,"scope"),i&&i.needsNewScope&&(t=t.$parent.$new()),r=r||{};var o=r.parentBoundTranscludeFn,u=r.transcludeControllers;if(r=r.futureParentElement,o&&o.$$boundTransclude&&(o=o.$$boundTransclude),a||(a=(r=r&&r[0])&&"foreignobject"!==D(r)&&r.toString().match(/SVG/)?"svg":"html"),r="html"!==a?In(J(a,In("
").append(e).html())):n?Er.clone.call(e):e,u)for(var c in u)r.data("$"+c+"Controller",u[c].instance);return M.$$addScopeInfo(r,t),n&&n(r,t),s&&s(t,r,r,o),r}}function j(e,t,r,i,o,s){function a(e,r,i,o){var s,a,u,c,l,f,h;if(p)for(h=Array(r.length),c=0;cc;)a=h[d[c++]],r=d[c++],s=d[c++],r?(r.scope?(u=e.$new(),M.$$addScopeInfo(In(a),u)):u=e,f=r.transcludeOnThisElement?q(e,r.transclude,o):!r.templateOnThisElement&&o?o:!o&&t?q(e,t):null,r(s,u,a,i,f)):s&&s(e,a.childNodes,n,o)}for(var u,c,l,f,p,d=[],h=0;hd;d++){var m=!1,g=!1;a=p[d],o=a.name,u=ir(a.value),a=Ye(o),(l=le.test(a))&&(o=o.replace(Hr,"").substr(8).replace(/_(.)/g,function(e,t){return t.toUpperCase()})),(a=a.match(fe))&&_(a[1])&&(m=o,g=o.substr(0,o.length-5)+"end",o=o.substr(0,o.length-6)),a=Ye(o.toLowerCase()),s[a]=o,(l||!n.hasOwnProperty(a))&&(n[a]=u,Me(e,a)&&(n[a]=!0)),Z(e,t,u,a,l),B(t,a,"A",r,i,m,g)}if(e=e.className,b(e)&&(e=e.animVal),w(e)&&""!==e)for(;o=f.exec(e);)a=Ye(o[2]),B(t,a,"C",r,i)&&(n[a]=ir(o[3])),e=e.substr(o.index+o[0].length);break;case fr:if(11===Rn)for(;e.parentNode&&e.nextSibling&&e.nextSibling.nodeType===fr;)e.nodeValue+=e.nextSibling.nodeValue,e.parentNode.removeChild(e.nextSibling);Y(t,e.nodeValue);break;case 8:try{(o=c.exec(e.nodeValue))&&(a=Ye(o[1]),B(t,a,"M",r,i)&&(n[a]=ir(o[2])))}catch(v){}}return t.sort(G),t}function F(e,t,n){var r=[],i=0;if(t&&e.hasAttribute&&e.hasAttribute(t)){do{if(!e)throw Ir("uterdir",t,n);1==e.nodeType&&(e.hasAttribute(t)&&i++,e.hasAttribute(n)&&i--),r.push(e),e=e.nextSibling}while(i>0)}else r.push(e);return In(r)}function R(e,t,n){return function(r,i,o,s,a){return i=F(i[0],t,n),e(r,i,o,s,a)}}function I(e,r,o,s,a,u,c,l,f){function p(e,t,n,r){e&&(n&&(e=R(e,n,r)),e.require=$.require,e.directiveName=y,(N===$||$.$$isolateScope)&&(e=ee(e,{isolateScope:!0})),c.push(e)),t&&(n&&(t=R(t,n,r)),t.require=$.require,t.directiveName=y,(N===$||$.$$isolateScope)&&(t=ee(t,{isolateScope:!0})),l.push(t))}function d(e,t,n,r){var i;if(w(t)){var o=t.match(v);t=t.substring(o[0].length);var s=o[1]||o[3],o="?"===o[2];if("^^"===s?n=n.parent():i=(i=r&&r[t])&&i.instance,i||(r="$"+t+"Controller",i=s?n.inheritedData(r):n.data(r)),!i&&!o)throw Ir("ctreq",t,e)}else if(nr(t))for(i=[],s=0,o=t.length;o>s;s++)i[s]=d(e,t[s],n,r);return i||null}function h(e,t,n,r,i,o){var s,a=ce();for(s in r){var u=r[s],c={$scope:u===N||u.$$isolateScope?i:o,$element:e,$attrs:t,$transclude:n},l=u.controller;"@"==l&&(l=t[u.name]),c=g(l,c,!0,u.controllerAs),a[u.name]=c,q||e.data("$"+u.name+"Controller",c.instance)}return a}function m(e,t,i,s,a){function u(e,t,r){var i;return A(e)||(r=t,t=e,e=n),q&&(i=g),r||(r=q?$.parent():$),a(e,t,i,r,S)}var f,p,m,g,v,$,y;r===i?(s=o,$=o.$$element):($=In(i),s=new oe($,o)),m=t,N?p=t.$new(!0):k&&(m=t.$parent),a&&(v=u,v.$$boundTransclude=a),T&&(g=h($,s,v,T,p,t)),N&&(M.$$addScopeInfo($,p,!0,!(O&&(O===N||O===N.$$originalDirective))),M.$$addScopeClass($,!0),p.$$isolateBindings=N.$$isolateBindings,(y=re(t,s,p,p.$$isolateBindings,N))&&p.$on("$destroy",y));for(var b in g){y=T[b];var x=g[b],w=y.$$bindings.bindToController;x.identifier&&w&&(f=re(m,s,x.instance,w,y));var C=x();C!==x.instance&&(x.instance=C,$.data("$"+y.name+"Controller",C),f&&f(),f=re(m,s,x.instance,w,y))}for(B=0,_=c.length;_>B;B++)f=c[B],te(f,f.isolateScope?p:t,$,s,f.require&&d(f.directiveName,f.require,$,g),v);var S=t;for(N&&(N.template||null===N.templateUrl)&&(S=p),e&&e(S,i.childNodes,n,a),B=l.length-1;B>=0;B--)f=l[B],te(f,f.isolateScope?p:t,$,s,f.require&&d(f.directiveName,f.require,$,g),v)}f=f||{};for(var $,y,x,C,S=-Number.MAX_VALUE,k=f.newScopeDirective,T=f.controllerDirectives,N=f.newIsolateScopeDirective,O=f.templateDirective,j=f.nonTlbTranscludeDirective,D=!1,P=!1,q=f.hasElementTranscludeDirective,L=o.$$element=In(r),I=s,B=0,_=e.length;_>B;B++){$=e[B];var G=$.$$start,Y=$.$$end;if(G&&(L=F(r,G,Y)),x=n,S>$.priority)break;if((x=$.scope)&&($.templateUrl||(b(x)?(X("new/isolated scope",N||k,$,L),N=$):X("new/isolated scope",N,$,L)),k=k||$),y=$.name,!$.templateUrl&&$.controller&&(x=$.controller,T=T||ce(),X("'"+y+"' controller",T[y],$,L),T[y]=$),(x=$.transclude)&&(D=!0,$.$$tlb||(X("transclusion",j,$,L),j=$),"element"==x?(q=!0,S=$.priority,x=L,L=o.$$element=In(t.createComment(" "+y+": "+o[y]+" ")),r=L[0],Q(a,Gn.call(x,0),r),I=M(x,s,S,u&&u.name,{nonTlbTranscludeDirective:j})):(x=In(ge(r)).contents(),L.empty(),I=M(x,s,n,n,{needsNewScope:$.$$isolateScope||$.$$newScope}))),$.template)if(P=!0,X("template",O,$,L),O=$,x=E($.template)?$.template(L,o):$.template,x=ue(x),$.replace){if(u=$,x=br.test(x)?Ke(J($.templateNamespace,ir(x))):[],r=x[0],1!=x.length||1!==r.nodeType)throw Ir("tplrt",y,"");Q(a,L,r),x={$attr:{}};var K=V(r,[],x),Z=e.splice(B+1,e.length-(B+1));(N||k)&&H(K,N,k),e=e.concat(K).concat(Z),U(o,x),_=e.length}else L.html(x);if($.templateUrl)P=!0,X("template",O,$,L),O=$,$.replace&&(u=$),m=W(e.splice(B,e.length-B),L,o,a,D&&I,c,l,{controllerDirectives:T,newScopeDirective:k!==$&&k,newIsolateScopeDirective:N,templateDirective:O,nonTlbTranscludeDirective:j}),_=e.length;else if($.compile)try{C=$.compile(L,o,I),E(C)?p(null,C,G,Y):C&&p(C.pre,C.post,G,Y)}catch(ne){i(ne,z(L))}$.terminal&&(m.terminal=!0,S=Math.max(S,$.priority))}return m.scope=k&&!0===k.scope,m.transcludeOnThisElement=D,m.templateOnThisElement=P,m.transclude=I,f.hasElementTranscludeDirective=q,m}function H(e,t,n){for(var r=0,i=e.length;i>r;r++)e[r]=d(e[r],{$$isolateScope:t,$$newScope:n})}function B(t,n,r,o,s,a,c){if(n===s)return null;if(s=null,u.hasOwnProperty(n)){var l;n=e.get(n+"Directive");for(var f=0,p=n.length;p>f;f++)try{l=n[f],($(o)||o>l.priority)&&-1!=l.restrict.indexOf(r)&&(a&&(l=d(l,{$$start:a,$$end:c})),t.push(l),s=l)}catch(h){i(h)}}return s}function _(t){if(u.hasOwnProperty(t))for(var n=e.get(t+"Directive"),r=0,i=n.length;i>r;r++)if(t=n[r],t.multiElement)return!0;return!1}function U(e,t){var n=t.$attr,r=e.$attr,i=e.$$element;o(e,function(r,i){"$"!=i.charAt(0)&&(t[i]&&t[i]!==r&&(r+=("style"===i?";":" ")+t[i]),e.$set(i,r,!0,n[i]))}),o(t,function(t,o){"class"==o?(O(i,t),e["class"]=(e["class"]?e["class"]+" ":"")+t):"style"==o?(i.attr("style",i.attr("style")+";"+t),e.style=(e.style?e.style+";":"")+t):"$"==o.charAt(0)||e.hasOwnProperty(o)||(e[o]=t,r[o]=n[o])})}function W(e,t,n,r,i,a,u,c){var l,f,p=[],h=t[0],m=e.shift(),g=d(m,{templateUrl:null,transclude:null,replace:null,$$originalDirective:m}),v=E(m.templateUrl)?m.templateUrl(t,n):m.templateUrl,$=m.templateNamespace;return t.empty(),s(v).then(function(s){var d,y;if(s=ue(s),m.replace){if(s=br.test(s)?Ke(J($,ir(s))):[],d=s[0],1!=s.length||1!==d.nodeType)throw Ir("tplrt",m.name,v);s={$attr:{}},Q(r,t,d);var x=V(d,[],s);b(m.scope)&&H(x,!0),e=x.concat(e),U(n,s)}else d=h,t.html(s);for(e.unshift(g),l=I(e,d,n,i,t,m,a,u,c),o(r,function(e,n){e==d&&(r[n]=t[0])}),f=j(t[0].childNodes,i);p.length;){s=p.shift(),y=p.shift();var w=p.shift(),C=p.shift(),x=t[0];if(!s.$$destroyed){if(y!==h){var S=y.className;c.hasElementTranscludeDirective&&m.replace||(x=ge(d)), +Q(w,In(y),x),O(In(x),S)}y=l.transcludeOnThisElement?q(s,l.transclude,C):C,l(f,s,x,r,y)}}p=null}),function(e,t,n,r,i){e=i,t.$$destroyed||(p?p.push(t,n,r,e):(l.transcludeOnThisElement&&(e=q(t,l.transclude,i)),l(f,t,n,r,e)))}}function G(e,t){var n=t.priority-e.priority;return 0!==n?n:e.name!==t.name?e.name"+n+"",r.childNodes[0].childNodes;default:return n}}function K(e,t){if("srcdoc"==t)return k.HTML;var n=D(e);return"xlinkHref"==t||"form"==n&&"action"==t||"img"!=n&&("src"==t||"ngSrc"==t)?k.RESOURCE_URL:void 0}function Z(e,t,n,i,o){var s=K(e,i);o=p[i]||o;var a=r(n,!0,s,o);if(a){if("multiple"===i&&"select"===D(e))throw Ir("selmulti",z(e));t.push({priority:100,compile:function(){return{pre:function(e,t,u){if(t=u.$$observers||(u.$$observers=ce()),x.test(i))throw Ir("nodomevents");var c=u[i];c!==n&&(a=c&&r(c,!0,s,o),n=c),a&&(u[i]=a(e),(t[i]||(t[i]=[])).$$inter=!0,(u.$$observers&&u.$$observers[i].$$scope||e).$watch(a,function(e,t){"class"===i&&e!=t?u.$updateClass(e,t):u.$set(i,e)}))}}}})}}function Q(e,n,r){var i,o,s=n[0],a=n.length,u=s.parentNode;if(e)for(i=0,o=e.length;o>i;i++)if(e[i]==s){e[i++]=r,o=i+a-1;for(var c=e.length;c>i;i++,o++)c>o?e[i]=e[o]:delete e[i];e.length-=a-1,e.context===s&&(e.context=r);break}for(u&&u.replaceChild(r,s),e=t.createDocumentFragment(),e.appendChild(s),In.hasData(s)&&(In.data(r,In.data(s)),Hn?(tr=!0,Hn.cleanData([s])):delete In.cache[s[In.expando]]),s=1,a=n.length;a>s;s++)u=n[s],In(u).remove(),e.appendChild(u),delete n[s];n[0]=r,n.length=1}function ee(e,t){return l(function(){return e.apply(null,arguments)},e,t)}function te(e,t,n,r,o,s){try{e(t,n,r,o,s)}catch(a){i(a,z(n))}}function re(e,t,n,i,s){var u=[];return o(i,function(i,o){var c,l,f,p,d=i.attrName,m=i.optional;switch(i.mode){case"@":m||zn.call(t,d)||(n[o]=t[d]=void 0),t.$observe(d,function(e){w(e)&&(n[o]=e)}),t.$$observers[d].$$scope=e,w(t[d])&&(n[o]=r(t[d])(e));break;case"=":if(!zn.call(t,d)){if(m)break;t[d]=void 0}if(m&&!t[d])break;l=a(t[d]),p=l.literal?L:function(e,t){return e===t||e!==e&&t!==t},f=l.assign||function(){throw c=n[o]=l(e),Ir("nonassign",t[d],s.name)},c=n[o]=l(e),m=function(t){return p(t,n[o])||(p(t,c)?f(e,t=n[o]):n[o]=t),c=t},m.$stateful=!0,m=i.collection?e.$watchCollection(t[d],m):e.$watch(a(t[d],m),null,l.literal),u.push(m);break;case"&":if(l=t.hasOwnProperty(d)?a(t[d]):h,l===h&&m)break;n[o]=function(t){return l(e,t)}}}),u.length&&function(){for(var e=0,t=u.length;t>e;++e)u[e]()}}var oe=function(e,t){if(t){var n,r,i,o=Object.keys(t);for(n=0,r=o.length;r>n;n++)i=o[n],this[i]=t[i]}else this.$attr={};this.$$element=e};oe.prototype={$normalize:Ye,$addClass:function(e){e&&0l;l++)var f=2*l,s=s+N(ir(a[f]),!0),s=s+(" "+ir(a[f+1]));a=ir(a[2*l]).split(/\s/),s+=N(ir(a[0]),!0),2===a.length&&(s+=" "+ir(a[1])),this[e]=t=s}!1!==n&&(null===t||$(t)?this.$$element.removeAttr(r):this.$$element.attr(r,t)),(e=this.$$observers)&&o(e[u],function(e){try{e(t)}catch(n){i(n)}})},$observe:function(e,t){var n=this,r=n.$$observers||(n.$$observers=ce()),i=r[e]||(r[e]=[]);return i.push(t),y.$evalAsync(function(){i.$$inter||!n.hasOwnProperty(e)||$(n[e])||t(n[e])}),function(){P(i,t)}}};var se=r.startSymbol(),ae=r.endSymbol(),ue="{{"==se||"}}"==ae?m:function(e){return e.replace(/\{\{/g,se).replace(/}}/g,ae)},le=/^ngAttr[A-Z]/,fe=/^(.+)Start$/;return M.$$addBindingInfo=C?function(e,t){var n=e.data("$binding")||[];nr(t)?n=n.concat(t):n.push(t),e.data("$binding",n)}:h,M.$$addBindingClass=C?function(e){O(e,"ng-binding")}:h,M.$$addScopeInfo=C?function(e,t,n,r){e.data(n?r?"$isolateScopeNoTemplate":"$isolateScope":"$scope",t)}:h,M.$$addScopeClass=C?function(e,t){O(e,t?"ng-isolate-scope":"ng-scope")}:h,M}]}function Ye(e){return pe(e.replace(Hr,""))}function Je(e,t){var n="",r=e.split(/\s+/),i=t.split(/\s+/),o=0;e:for(;o=t)return e;for(;t--;)8===e[t].nodeType&&Xn.call(e,t,1);return e}function Ze(){var e={},t=!1;this.register=function(t,n){se(t,"controller"),b(t)?l(e,t):e[t]=n},this.allowGlobals=function(){t=!0},this.$get=["$injector","$window",function(i,o){function s(e,t,n,i){if(!e||!b(e.$scope))throw r("$controller")("noscp",i,t);e.$scope[t]=n}return function(r,a,u,c){var f,p,d;if(u=!0===u,c&&w(c)&&(d=c),w(r)){if(c=r.match(_r),!c)throw Br("ctrlfmt",r);p=c[1],d=d||c[3],r=e.hasOwnProperty(p)?e[p]:ae(a.$scope,p,!0)||(t?ae(o,p,!0):n),oe(r,p,!0)}return u?(u=(nr(r)?r[r.length-1]:r).prototype,f=Object.create(u||null),d&&s(a,d,f,p||r.name),l(function(){var e=i.invoke(r,f,a,p);return e!==f&&(b(e)||E(e))&&(f=e,d&&s(a,d,f,p||r.name)),f},{instance:f,identifier:d})):(f=i.instantiate(r,a,p),d&&s(a,d,f,p||r.name),f)}}]}function Qe(){this.$get=["$window",function(e){return In(e.document)}]}function et(){this.$get=["$log",function(e){return function(t,n){e.error.apply(e,arguments)}}]}function tt(e){return b(e)?S(e)?e.toISOString():H(e):e}function nt(){this.$get=function(){return function(e){if(!e)return"";var t=[];return s(e,function(e,n){null===e||$(e)||(nr(e)?o(e,function(e,r){t.push(J(n)+"="+J(tt(e)))}):t.push(J(n)+"="+J(tt(e))))}),t.join("&")}}}function rt(){this.$get=function(){return function(e){function t(e,r,i){null===e||$(e)||(nr(e)?o(e,function(e,n){t(e,r+"["+(b(e)?n:"")+"]")}):b(e)&&!S(e)?s(e,function(e,n){t(e,r+(i?"":"[")+n+(i?"":"]"))}):n.push(J(r)+"="+J(tt(e))))}if(!e)return"";var n=[];return t(e,"",!0),n.join("&")}}}function it(e,t){if(w(e)){var n=e.replace(Yr,"").trim();if(n){var r=t("Content-Type");(r=r&&0===r.indexOf(zr))||(r=(r=n.match(Gr))&&Xr[r[0]].test(n)),r&&(e=B(n))}}return e}function ot(e){var t,n=ce();return w(e)?o(e.split("\n"),function(e){t=e.indexOf(":");var r=Un(ir(e.substr(0,t)));e=ir(e.substr(t+1)),r&&(n[r]=n[r]?n[r]+", "+e:e)}):b(e)&&o(e,function(e,t){var r=Un(t),i=ir(e);r&&(n[r]=n[r]?n[r]+", "+i:i)}),n}function st(e){var t;return function(n){return t||(t=ot(e)),n?(n=t[Un(n)],void 0===n&&(n=null),n):t}}function at(e,t,n,r){return E(r)?r(e,t,n):(o(r,function(r){e=r(e,t,n)}),e)}function ut(){var e=this.defaults={transformResponse:[it],transformRequest:[function(e){return b(e)&&"[object File]"!==Jn.call(e)&&"[object Blob]"!==Jn.call(e)&&"[object FormData]"!==Jn.call(e)?H(e):e}],headers:{common:{Accept:"application/json, text/plain, */*"},post:V(Wr),put:V(Wr),patch:V(Wr)},xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",paramSerializer:"$httpParamSerializer"},t=!1;this.useApplyAsync=function(e){return y(e)?(t=!!e,this):t};var i=!0;this.useLegacyPromiseExtensions=function(e){return y(e)?(i=!!e,this):i};var s=this.interceptors=[];this.$get=["$httpBackend","$$cookieReader","$cacheFactory","$rootScope","$q","$injector",function(a,u,c,f,p,d){function h(t){function s(e){var t=l({},e);return t.data=at(e.data,e.headers,e.status,u.transformResponse),e=e.status,e>=200&&300>e?t:p.reject(t)}function a(e,t){var n,r={};return o(e,function(e,i){E(e)?(n=e(t),null!=n&&(r[i]=n)):r[i]=e}),r}if(!Qn.isObject(t))throw r("$http")("badreq",t);var u=l({method:"get",transformRequest:e.transformRequest,transformResponse:e.transformResponse,paramSerializer:e.paramSerializer},t);u.headers=function(t){var n,r,i,o=e.headers,s=l({},t.headers),o=l({},o.common,o[Un(t.method)]);e:for(n in o){r=Un(n);for(i in s)if(Un(i)===r)continue e;s[n]=o[n]}return a(s,V(t))}(t),u.method=Wn(u.method),u.paramSerializer=w(u.paramSerializer)?d.get(u.paramSerializer):u.paramSerializer;var c=[function(t){var r=t.headers,i=at(t.data,st(r),n,t.transformRequest);return $(i)&&o(r,function(e,t){"content-type"===Un(t)&&delete r[t]}),$(t.withCredentials)&&!$(e.withCredentials)&&(t.withCredentials=e.withCredentials),m(t,i).then(s,s)},n],f=p.when(u);for(o(x,function(e){(e.request||e.requestError)&&c.unshift(e.request,e.requestError),(e.response||e.responseError)&&c.push(e.response,e.responseError)});c.length;){t=c.shift();var h=c.shift(),f=f.then(t,h)}return i?(f.success=function(e){return oe(e,"fn"),f.then(function(t){e(t.data,t.status,t.headers,u)}),f},f.error=function(e){return oe(e,"fn"),f.then(null,function(t){e(t.data,t.status,t.headers,u)}),f}):(f.success=Kr("success"),f.error=Kr("error")),f}function m(r,i){function o(e,n,r,i){function o(){s(n,e,r,i)}d&&(e>=200&&300>e?d.put(S,[e,n,ot(r),i]):d.remove(S)),t?f.$applyAsync(o):(o(),f.$$phase||f.$apply())}function s(e,t,n,i){t=t>=-1?t:0,(t>=200&&300>t?x.resolve:x.reject)({data:e,status:t,headers:st(n),config:r,statusText:i})}function c(e){s(e.data,e.status,V(e.headers()),e.statusText)}function l(){var e=h.pendingRequests.indexOf(r);-1!==e&&h.pendingRequests.splice(e,1)}var d,m,x=p.defer(),w=x.promise,C=r.headers,S=g(r.url,r.paramSerializer(r.params));return h.pendingRequests.push(r),w.then(l,l),!r.cache&&!e.cache||!1===r.cache||"GET"!==r.method&&"JSONP"!==r.method||(d=b(r.cache)?r.cache:b(e.cache)?e.cache:v),d&&(m=d.get(S),y(m)?m&&E(m.then)?m.then(c,c):nr(m)?s(m[1],m[0],V(m[2]),m[3]):s(m,200,{},"OK"):d.put(S,w)),$(m)&&((m=sn(r.url)?u()[r.xsrfCookieName||e.xsrfCookieName]:n)&&(C[r.xsrfHeaderName||e.xsrfHeaderName]=m),a(r.method,S,i,o,C,r.timeout,r.withCredentials,r.responseType)),w}function g(e,t){return 00)var C=n(m,f);else f&&E(f.then)&&f.then(m)}}function pt(){var e="{{",t="}}";this.startSymbol=function(t){return t?(e=t,this):e},this.endSymbol=function(e){return e?(t=e,this):t},this.$get=["$parse","$exceptionHandler","$sce",function(n,r,i){function o(e){return"\\\\\\"+e}function s(n){return n.replace(f,e).replace(p,t)}function a(o,a,f,p){function d(e){try{var t=e;e=f?i.getTrusted(f,t):i.valueOf(t);var n;if(p&&!y(e))n=e;else if(null==e)n="";else{switch(typeof e){case"string":break;case"number":e=""+e;break;default:e=H(e)}n=e}return n}catch(s){r(Zr.interr(o,s))}}p=!!p;for(var h,m,g=0,v=[],b=[],x=o.length,w=[],C=[];x>g;){if(-1==(h=o.indexOf(e,g))||-1==(m=o.indexOf(t,h+u))){g!==x&&w.push(s(o.substring(g)));break}g!==h&&w.push(s(o.substring(g,h))),g=o.substring(h+u,m),v.push(g),b.push(n(g,d)),g=m+c,C.push(w.length),w.push("")}if(f&&1t;t++){if(p&&$(e[t]))return;w[C[t]]=e[t]}return w.join("")};return l(function(e){var t=0,n=v.length,i=Array(n);try{for(;n>t;t++)i[t]=b[t](e);return S(i)}catch(s){r(Zr.interr(o,s))}},{exp:o,expressions:v,$$watchDelegate:function(e,t){var n;return e.$watchGroup(b,function(r,i){var o=S(r);E(t)&&t.call(this,o,r!==i?n:o,e),n=o})}})}}var u=e.length,c=t.length,f=new RegExp(e.replace(/./g,o),"g"),p=new RegExp(t.replace(/./g,o),"g");return a.startSymbol=function(){return e},a.endSymbol=function(){return t},a}]}function dt(){this.$get=["$rootScope","$window","$q","$$q",function(e,t,n,r){function i(i,s,a,u){var c=40&&d>=a&&(m.resolve(d),p(g.$$intervalId),delete o[g.$$intervalId]),h||e.$apply()},s),o[g.$$intervalId]=m,g}var o={};return i.cancel=function(e){return e&&e.$$intervalId in o?(o[e.$$intervalId].reject("canceled"),t.clearInterval(e.$$intervalId),delete o[e.$$intervalId],!0):!1},i}]}function ht(e){e=e.split("/");for(var t=e.length;t--;)e[t]=Y(e[t]);return e.join("/")}function mt(e,t){var n=on(e);t.$$protocol=n.protocol,t.$$host=n.hostname,t.$$port=p(n.port)||ei[n.protocol]||null}function gt(e,t){var n="/"!==e.charAt(0);n&&(e="/"+e);var r=on(e);t.$$path=decodeURIComponent(n&&"/"===r.pathname.charAt(0)?r.pathname.substring(1):r.pathname),t.$$search=G(r.search),t.$$hash=decodeURIComponent(r.hash),t.$$path&&"/"!=t.$$path.charAt(0)&&(t.$$path="/"+t.$$path)}function vt(e,t){return 0===t.indexOf(e)?t.substr(e.length):void 0}function $t(e){var t=e.indexOf("#");return-1==t?e:e.substr(0,t)}function yt(e){return e.replace(/(#.+)|#$/,"$1")}function bt(e,t,n){this.$$html5=!0,n=n||"",mt(e,this),this.$$parse=function(e){var n=vt(t,e);if(!w(n))throw ti("ipthprfx",e,t);gt(n,this),this.$$path||(this.$$path="/"),this.$$compose()},this.$$compose=function(){var e=X(this.$$search),n=this.$$hash?"#"+Y(this.$$hash):"";this.$$url=ht(this.$$path)+(e?"?"+e:"")+n,this.$$absUrl=t+this.$$url.substr(1)},this.$$parseLinkUrl=function(r,i){if(i&&"#"===i[0])return this.hash(i.slice(1)),!0;var o,s;return y(o=vt(e,r))?(s=o,s=y(o=vt(n,o))?t+(vt("/",o)||o):e+s):y(o=vt(t,r))?s=t+o:t==r+"/"&&(s=t),s&&this.$$parse(s),!!s}}function xt(e,t,n){mt(e,this),this.$$parse=function(r){var i,o=vt(e,r)||vt(t,r);$(o)||"#"!==o.charAt(0)?this.$$html5?i=o:(i="",$(o)&&(e=r,this.replace())):(i=vt(n,o),$(i)&&(i=o)),gt(i,this),r=this.$$path;var o=e,s=/^\/[A-Z]:(\/.*)/;0===i.indexOf(o)&&(i=i.replace(o,"")),s.exec(i)||(r=(i=s.exec(r))?i[1]:r),this.$$path=r,this.$$compose()},this.$$compose=function(){var t=X(this.$$search),r=this.$$hash?"#"+Y(this.$$hash):"";this.$$url=ht(this.$$path)+(t?"?"+t:"")+r,this.$$absUrl=e+(this.$$url?n+this.$$url:"")},this.$$parseLinkUrl=function(t,n){return $t(e)==$t(t)?(this.$$parse(t),!0):!1}}function wt(e,t,n){this.$$html5=!0,xt.apply(this,arguments),this.$$parseLinkUrl=function(r,i){if(i&&"#"===i[0])return this.hash(i.slice(1)),!0;var o,s;return e==$t(r)?o=r:(s=vt(t,r))?o=e+n+s:t===r+"/"&&(o=t),o&&this.$$parse(o),!!o},this.$$compose=function(){var t=X(this.$$search),r=this.$$hash?"#"+Y(this.$$hash):"";this.$$url=ht(this.$$path)+(t?"?"+t:"")+r,this.$$absUrl=e+n+this.$$url}}function Ct(e){return function(){return this[e]}}function St(e,t){return function(n){return $(n)?this[e]:(this[e]=t(n),this.$$compose(),this)}}function Et(){var e="",t={enabled:!1,requireBase:!0,rewriteLinks:!0};this.hashPrefix=function(t){return y(t)?(e=t,this):e},this.html5Mode=function(e){return N(e)?(t.enabled=e,this):b(e)?(N(e.enabled)&&(t.enabled=e.enabled),N(e.requireBase)&&(t.requireBase=e.requireBase),N(e.rewriteLinks)&&(t.rewriteLinks=e.rewriteLinks),this):t},this.$get=["$rootScope","$browser","$sniffer","$rootElement","$window",function(n,r,i,o,s){function a(e,t,n){var i=c.url(),o=c.$$state;try{r.url(e,t,n),c.$$state=r.state()}catch(s){throw c.url(i),c.$$state=o,s}}function u(e,t){n.$broadcast("$locationChangeSuccess",c.absUrl(),e,c.$$state,t)}var c,l;l=r.baseHref();var f,p=r.url();if(t.enabled){if(!l&&t.requireBase)throw ti("nobase");f=p.substring(0,p.indexOf("/",p.indexOf("//")+2))+(l||"/"),l=i.history?bt:wt}else f=$t(p),l=xt;var d=f.substr(0,$t(f).lastIndexOf("/")+1);c=new l(f,d,"#"+e),c.$$parseLinkUrl(p,p),c.$$state=r.state();var h=/^\s*(javascript|mailto):/i;o.on("click",function(e){if(t.rewriteLinks&&!e.ctrlKey&&!e.metaKey&&!e.shiftKey&&2!=e.which&&2!=e.button){for(var i=In(e.target);"a"!==D(i[0]);)if(i[0]===o[0]||!(i=i.parent())[0])return;var a=i.prop("href"),u=i.attr("href")||i.attr("xlink:href");b(a)&&"[object SVGAnimatedString]"===a.toString()&&(a=on(a.animVal).href),h.test(a)||!a||i.attr("target")||e.isDefaultPrevented()||!c.$$parseLinkUrl(a,u)||(e.preventDefault(),c.absUrl()!=r.url()&&(n.$apply(),s.angular["ff-684208-preventDefault"]=!0))}}),yt(c.absUrl())!=yt(p)&&r.url(c.absUrl(),!0);var m=!0;return r.onUrlChange(function(e,t){$(vt(d,e))?s.location.href=e:(n.$evalAsync(function(){var r,i=c.absUrl(),o=c.$$state;e=yt(e),c.$$parse(e),c.$$state=t,r=n.$broadcast("$locationChangeStart",e,i,t,o).defaultPrevented,c.absUrl()===e&&(r?(c.$$parse(i),c.$$state=o,a(i,!1,o)):(m=!1,u(i,o)))}),n.$$phase||n.$digest())}),n.$watch(function(){var e=yt(r.url()),t=yt(c.absUrl()),o=r.state(),s=c.$$replace,l=e!==t||c.$$html5&&i.history&&o!==c.$$state;(m||l)&&(m=!1,n.$evalAsync(function(){var t=c.absUrl(),r=n.$broadcast("$locationChangeStart",t,e,c.$$state,o).defaultPrevented;c.absUrl()===t&&(r?(c.$$parse(e),c.$$state=o):(l&&a(t,s,o===c.$$state?null:c.$$state),u(e,o)))})),c.$$replace=!1}),c}]}function kt(){var e=!0,t=this;this.debugEnabled=function(t){return y(t)?(e=t,this):e},this.$get=["$window",function(n){function r(e){return e instanceof Error&&(e.stack?e=e.message&&-1===e.stack.indexOf(e.message)?"Error: "+e.message+"\n"+e.stack:e.stack:e.sourceURL&&(e=e.message+"\n"+e.sourceURL+":"+e.line)),e}function i(e){var t=n.console||{},i=t[e]||t.log||h;e=!1;try{e=!!i.apply}catch(s){}return e?function(){var e=[];return o(arguments,function(t){e.push(r(t))}),i.apply(t,e)}:function(e,t){i(e,null==t?"":t)}}return{log:i("log"),info:i("info"),warn:i("warn"),error:i("error"),debug:function(){var n=i("debug");return function(){e&&n.apply(t,arguments)}}()}}]}function Tt(e,t){if("__defineGetter__"===e||"__defineSetter__"===e||"__lookupGetter__"===e||"__lookupSetter__"===e||"__proto__"===e)throw ri("isecfld",t);return e}function At(e,t){if(e+="",!w(e))throw ri("iseccst",t);return e}function Nt(e,t){if(e){if(e.constructor===e)throw ri("isecfn",t);if(e.window===e)throw ri("isecwindow",t);if(e.children&&(e.nodeName||e.prop&&e.attr&&e.find))throw ri("isecdom",t);if(e===Object)throw ri("isecobj",t)}return e}function Ot(e,t){if(e){if(e.constructor===e)throw ri("isecfn",t);if(e===ii||e===oi||e===si)throw ri("isecff",t)}}function Mt(e,t){if(e&&(e===0..constructor||e===(!1).constructor||e==="".constructor||e==={}.constructor||e===[].constructor||e===Function.constructor))throw ri("isecaf",t)}function jt(e,t){return"undefined"!=typeof e?e:t}function Dt(e,t){return"undefined"==typeof e?t:"undefined"==typeof t?e:e+t}function Pt(e,t){var n,r;switch(e.type){case li.Program:n=!0,o(e.body,function(e){Pt(e.expression,t),n=n&&e.expression.constant}),e.constant=n;break;case li.Literal:e.constant=!0,e.toWatch=[];break;case li.UnaryExpression:Pt(e.argument,t),e.constant=e.argument.constant,e.toWatch=e.argument.toWatch;break;case li.BinaryExpression:Pt(e.left,t),Pt(e.right,t),e.constant=e.left.constant&&e.right.constant,e.toWatch=e.left.toWatch.concat(e.right.toWatch);break;case li.LogicalExpression:Pt(e.left,t),Pt(e.right,t),e.constant=e.left.constant&&e.right.constant,e.toWatch=e.constant?[]:[e];break;case li.ConditionalExpression:Pt(e.test,t),Pt(e.alternate,t),Pt(e.consequent,t),e.constant=e.test.constant&&e.alternate.constant&&e.consequent.constant,e.toWatch=e.constant?[]:[e];break;case li.Identifier:e.constant=!1,e.toWatch=[e];break;case li.MemberExpression:Pt(e.object,t),e.computed&&Pt(e.property,t),e.constant=e.object.constant&&(!e.computed||e.property.constant),e.toWatch=[e];break;case li.CallExpression:n=e.filter?!t(e.callee.name).$stateful:!1,r=[],o(e.arguments,function(e){Pt(e,t),n=n&&e.constant,e.constant||r.push.apply(r,e.toWatch)}),e.constant=n,e.toWatch=e.filter&&!t(e.callee.name).$stateful?r:[e];break;case li.AssignmentExpression:Pt(e.left,t),Pt(e.right,t),e.constant=e.left.constant&&e.right.constant,e.toWatch=[e];break;case li.ArrayExpression:n=!0,r=[],o(e.elements,function(e){Pt(e,t),n=n&&e.constant,e.constant||r.push.apply(r,e.toWatch)}),e.constant=n,e.toWatch=r;break;case li.ObjectExpression:n=!0,r=[],o(e.properties,function(e){Pt(e.value,t),n=n&&e.value.constant,e.value.constant||r.push.apply(r,e.value.toWatch)}),e.constant=n,e.toWatch=r;break;case li.ThisExpression:e.constant=!1,e.toWatch=[]}}function qt(e){if(1==e.length){e=e[0].expression;var t=e.toWatch;return 1!==t.length?t:t[0]!==e?t:n}}function Vt(e){return e.type===li.Identifier||e.type===li.MemberExpression}function Lt(e){return 1===e.body.length&&Vt(e.body[0].expression)?{type:li.AssignmentExpression,left:e.body[0].expression,right:{type:li.NGValueParameter},operator:"="}:void 0}function Ft(e){return 0===e.body.length||1===e.body.length&&(e.body[0].expression.type===li.Literal||e.body[0].expression.type===li.ArrayExpression||e.body[0].expression.type===li.ObjectExpression)}function Rt(e,t){this.astBuilder=e,this.$filter=t}function It(e,t){this.astBuilder=e,this.$filter=t}function Ht(e){return"constructor"==e}function Bt(e){return E(e.valueOf)?e.valueOf():pi.call(e)}function _t(){var e=ce(),t=ce();this.$get=["$filter",function(r){function i(e,t){return null==e||null==t?e===t:"object"==typeof e&&(e=Bt(e),"object"==typeof e)?!1:e===t||e!==e&&t!==t}function s(e,t,r,o,s){var a,u=o.inputs;if(1===u.length){var c=i,u=u[0];return e.$watch(function(e){var t=u(e);return i(t,c)||(a=o(e,n,n,[t]),c=t&&Bt(t)),a},t,r,s)}for(var l=[],f=[],p=0,d=u.length;d>p;p++)l[p]=i,f[p]=null;return e.$watch(function(e){for(var t=!1,r=0,s=u.length;s>r;r++){var c=u[r](e);(t||(t=!i(c,l[r])))&&(f[r]=c,l[r]=c&&Bt(c))}return t&&(a=o(e,n,n,f)),a},t,r,s)}function a(e,t,n,r){var i,o;return i=e.$watch(function(e){return r(e)},function(e,n,r){o=e,E(t)&&t.apply(this,arguments),y(e)&&r.$$postDigest(function(){y(o)&&i()})},n)}function u(e,t,n,r){function i(e){var t=!0;return o(e,function(e){y(e)||(t=!1)}),t}var s,a;return s=e.$watch(function(e){return r(e)},function(e,n,r){a=e,E(t)&&t.call(this,e,n,r),i(e)&&r.$$postDigest(function(){i(a)&&s()})},n)}function c(e,t,n,r){var i;return i=e.$watch(function(e){return r(e)},function(e,n,r){E(t)&&t.apply(this,arguments),i()},n)}function l(e,t){if(!t)return e;var n=e.$$watchDelegate,r=!1,n=n!==u&&n!==a?function(n,i,o,s){return o=r&&s?s[0]:e(n,i,o,s),t(o,n,i)}:function(n,r,i,o){return i=e(n,r,i,o),n=t(i,n,r),y(i)?n:i};return e.$$watchDelegate&&e.$$watchDelegate!==s?n.$$watchDelegate=e.$$watchDelegate:t.$stateful||(n.$$watchDelegate=s,r=!e.inputs,n.inputs=e.inputs?e.inputs:[e]),n}var f=sr().noUnsafeEval,p={csp:f,expensiveChecks:!1},d={csp:f,expensiveChecks:!0};return function(n,i,o){var f,m,g;switch(typeof n){case"string":g=n=n.trim();var v=o?t:e;return f=v[g],f||(":"===n.charAt(0)&&":"===n.charAt(1)&&(m=!0,n=n.substring(2)),o=o?d:p,f=new ci(o),f=new fi(f,r,o).parse(n),f.constant?f.$$watchDelegate=c:m?f.$$watchDelegate=f.literal?u:a:f.inputs&&(f.$$watchDelegate=s),v[g]=f),l(f,i);case"function":return l(n,i);default:return h}}}]}function Ut(){this.$get=["$rootScope","$exceptionHandler",function(e,t){return Wt(function(t){e.$evalAsync(t)},t)}]}function zt(){this.$get=["$browser","$exceptionHandler",function(e,t){return Wt(function(t){e.defer(t)},t)}]}function Wt(e,t){function i(e,t,n){function r(t){return function(n){i||(i=!0,t.call(e,n))}}var i=!1;return[r(t),r(n)]}function s(){this.$$state={status:0}}function a(e,t){return function(n){t.call(e,n)}}function u(r){!r.processScheduled&&r.pending&&(r.processScheduled=!0,e(function(){var e,i,o;o=r.pending,r.processScheduled=!1,r.pending=n;for(var s=0,a=o.length;a>s;++s){i=o[s][0],e=o[s][r.status];try{E(e)?i.resolve(e(r.value)):1===r.status?i.resolve(r.value):i.reject(r.value)}catch(u){i.reject(u),t(u)}}}))}function c(){this.promise=new s,this.resolve=a(this,this.resolve),this.reject=a(this,this.reject),this.notify=a(this,this.notify)}var f=r("$q",TypeError);l(s.prototype,{then:function(e,t,n){if($(e)&&$(t)&&$(n))return this;var r=new c;return this.$$state.pending=this.$$state.pending||[],this.$$state.pending.push([r,e,t,n]),0=this.promise.$$state.status&&r&&r.length&&e(function(){for(var e,i,o=0,s=r.length;s>o;o++){i=r[o][0],e=r[o][3];try{i.notify(E(e)?e(n):n)}catch(a){t(a)}}})}});var p=function(e,t){var n=new c;return t?n.resolve(e):n.reject(e),n.promise},d=function(e,t,n){var r=null;try{E(n)&&(r=n())}catch(i){return p(i,!1)}return r&&E(r.then)?r.then(function(){return p(e,t)},function(e){return p(e,!1)}):p(e,t)},h=function(e,t,n,r){var i=new c;return i.resolve(e),i.promise.then(t,n,r)},m=function g(e){if(!E(e))throw f("norslvr",e);if(!(this instanceof g))return new g(e);var t=new c;return e(function(e){t.resolve(e)},function(e){t.reject(e)}),t.promise};return m.defer=function(){return new c},m.reject=function(e){var t=new c;return t.reject(e),t.promise},m.when=h,m.resolve=h,m.all=function(e){var t=new c,n=0,r=nr(e)?[]:{};return o(e,function(e,i){n++,h(e).then(function(e){r.hasOwnProperty(i)||(r[i]=e,--n||t.resolve(r))},function(e){r.hasOwnProperty(i)||t.reject(e)})}),0===n&&t.resolve(r),t.promise},m}function Gt(){this.$get=["$window","$timeout",function(e,t){var n=e.requestAnimationFrame||e.webkitRequestAnimationFrame,r=e.cancelAnimationFrame||e.webkitCancelAnimationFrame||e.webkitCancelRequestAnimationFrame,i=!!n,o=i?function(e){var t=n(e);return function(){r(t)}}:function(e){var n=t(e,16.66,!1);return function(){t.cancel(n)}};return o.supported=i,o}]}function Xt(){function e(e){function t(){this.$$watchers=this.$$nextSibling=this.$$childHead=this.$$childTail=null,this.$$listeners={},this.$$listenerCount={},this.$$watchersCount=0,this.$id=++er,this.$$ChildScope=null}return t.prototype=e,t}var t=10,n=r("$rootScope"),s=null,a=null;this.digestTtl=function(e){return arguments.length&&(t=e),t},this.$get=["$injector","$exceptionHandler","$parse","$browser",function(r,u,c,l){function f(e){e.currentScope.$$destroyed=!0}function p(e){9===Rn&&(e.$$childHead&&p(e.$$childHead),e.$$nextSibling&&p(e.$$nextSibling)),e.$parent=e.$$nextSibling=e.$$prevSibling=e.$$childHead=e.$$childTail=e.$root=e.$$watchers=null}function d(){this.$id=++er,this.$$phase=this.$parent=this.$$watchers=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=null,this.$root=this,this.$$destroyed=!1,this.$$listeners={},this.$$listenerCount={},this.$$watchersCount=0,this.$$isolateBindings=null}function m(e){if(C.$$phase)throw n("inprog",C.$$phase);C.$$phase=e}function g(e,t){do e.$$watchersCount+=t;while(e=e.$parent)}function v(e,t,n){do e.$$listenerCount[n]-=t,0===e.$$listenerCount[n]&&delete e.$$listenerCount[n];while(e=e.$parent)}function y(){}function x(){for(;T.length;)try{T.shift()()}catch(e){u(e)}a=null}function w(){null===a&&(a=l.defer(function(){C.$apply(x)}))}d.prototype={constructor:d,$new:function(t,n){var r;return n=n||this,t?(r=new d,r.$root=this.$root):(this.$$ChildScope||(this.$$ChildScope=e(this)),r=new this.$$ChildScope),r.$parent=n,r.$$prevSibling=n.$$childTail,n.$$childHead?(n.$$childTail.$$nextSibling=r,n.$$childTail=r):n.$$childHead=n.$$childTail=r,(t||n!=this)&&r.$on("$destroy",f),r},$watch:function(e,t,n,r){var i=c(e);if(i.$$watchDelegate)return i.$$watchDelegate(this,t,n,i,e);var o=this,a=o.$$watchers,u={fn:t,last:y,get:i,exp:r||e,eq:!!n};return s=null,E(t)||(u.fn=h),a||(a=o.$$watchers=[]),a.unshift(u),g(this,1),function(){0<=P(a,u)&&g(o,-1),s=null}},$watchGroup:function(e,t){function n(){u=!1,c?(c=!1,t(i,i,a)):t(i,r,a)}var r=Array(e.length),i=Array(e.length),s=[],a=this,u=!1,c=!0;if(!e.length){var l=!0;return a.$evalAsync(function(){l&&t(i,i,a)}),function(){l=!1}}return 1===e.length?this.$watch(e[0],function(e,n,o){i[0]=e,r[0]=n,t(i,e===n?i:r,o)}):(o(e,function(e,t){var o=a.$watch(e,function(e,o){i[t]=e,r[t]=o,u||(u=!0,a.$evalAsync(n))});s.push(o)}),function(){for(;s.length;)s.shift()()})},$watchCollection:function(e,t){function n(e){r=e;var t,n,s,a;if(!$(r)){if(b(r))if(i(r))for(o!==p&&(o=p,m=o.length=0,l++),e=r.length,m!==e&&(l++,o.length=m=e),t=0;e>t;t++)a=o[t],s=r[t],n=a!==a&&s!==s,n||a===s||(l++,o[t]=s);else{o!==d&&(o=d={},m=0,l++),e=0;for(t in r)zn.call(r,t)&&(e++,s=r[t],a=o[t],t in o?(n=a!==a&&s!==s,n||a===s||(l++,o[t]=s)):(m++,o[t]=s,l++));if(m>e)for(t in l++,o)zn.call(r,t)||(m--,delete o[t])}else o!==r&&(o=r,l++);return l}}n.$stateful=!0;var r,o,s,a=this,u=1g&&(d=4-g,v[d]||(v[d]=[]),v[d].push({msg:E(e.exp)?"fn: "+(e.exp.name||e.exp.toString()):e.exp,newVal:r,oldVal:i}))}catch(b){u(b)}if(!(o=p.$$watchersCount&&p.$$childHead||p!==this&&p.$$nextSibling))for(;p!==this&&!(o=p.$$nextSibling);)p=p.$parent}while(p=o); +if((f||S.length)&&!g--)throw C.$$phase=null,n("infdig",t,v)}while(f||S.length);for(C.$$phase=null;k.length;)try{k.shift()()}catch(w){u(w)}},$destroy:function(){if(!this.$$destroyed){var e=this.$parent;this.$broadcast("$destroy"),this.$$destroyed=!0,this===C&&l.$$applicationDestroyed(),g(this,-this.$$watchersCount);for(var t in this.$$listenerCount)v(this,this.$$listenerCount[t],t);e&&e.$$childHead==this&&(e.$$childHead=this.$$nextSibling),e&&e.$$childTail==this&&(e.$$childTail=this.$$prevSibling),this.$$prevSibling&&(this.$$prevSibling.$$nextSibling=this.$$nextSibling),this.$$nextSibling&&(this.$$nextSibling.$$prevSibling=this.$$prevSibling),this.$destroy=this.$digest=this.$apply=this.$evalAsync=this.$applyAsync=h,this.$on=this.$watch=this.$watchGroup=function(){return h},this.$$listeners={},this.$$nextSibling=null,p(this)}},$eval:function(e,t){return c(e)(this,t)},$evalAsync:function(e,t){C.$$phase||S.length||l.defer(function(){S.length&&C.$digest()}),S.push({scope:this,expression:e,locals:t})},$$postDigest:function(e){k.push(e)},$apply:function(e){try{m("$apply");try{return this.$eval(e)}finally{C.$$phase=null}}catch(t){u(t)}finally{try{C.$digest()}catch(n){throw u(n),n}}},$applyAsync:function(e){function t(){n.$eval(e)}var n=this;e&&T.push(t),w()},$on:function(e,t){var n=this.$$listeners[e];n||(this.$$listeners[e]=n=[]),n.push(t);var r=this;do r.$$listenerCount[e]||(r.$$listenerCount[e]=0),r.$$listenerCount[e]++;while(r=r.$parent);var i=this;return function(){var r=n.indexOf(t);-1!==r&&(n[r]=null,v(i,1,e))}},$emit:function(e,t){var n,r,i,o=[],s=this,a=!1,c={name:e,targetScope:s,stopPropagation:function(){a=!0},preventDefault:function(){c.defaultPrevented=!0},defaultPrevented:!1},l=F([c],arguments,1);do{for(n=s.$$listeners[e]||o,c.currentScope=s,r=0,i=n.length;i>r;r++)if(n[r])try{n[r].apply(null,l)}catch(f){u(f)}else n.splice(r,1),r--,i--;if(a)return c.currentScope=null,c;s=s.$parent}while(s);return c.currentScope=null,c},$broadcast:function(e,t){var n=this,r=this,i={name:e,targetScope:this,preventDefault:function(){i.defaultPrevented=!0},defaultPrevented:!1};if(!this.$$listenerCount[e])return i;for(var o,s,a=F([i],arguments,1);n=r;){for(i.currentScope=n,r=n.$$listeners[e]||[],o=0,s=r.length;s>o;o++)if(r[o])try{r[o].apply(null,a)}catch(c){u(c)}else r.splice(o,1),o--,s--;if(!(r=n.$$listenerCount[e]&&n.$$childHead||n!==this&&n.$$nextSibling))for(;n!==this&&!(r=n.$$nextSibling);)n=n.$parent}return i.currentScope=null,i}};var C=new d,S=C.$$asyncQueue=[],k=C.$$postDigestQueue=[],T=C.$$applyAsyncQueue=[];return C}]}function Yt(){var e=/^\s*(https?|ftp|mailto|tel|file):/,t=/^\s*((https?|ftp|file|blob):|data:image\/)/;this.aHrefSanitizationWhitelist=function(t){return y(t)?(e=t,this):e},this.imgSrcSanitizationWhitelist=function(e){return y(e)?(t=e,this):t},this.$get=function(){return function(n,r){var i,o=r?t:e;return i=on(n).href,""===i||i.match(o)?n:"unsafe:"+i}}}function Jt(e){if("self"===e)return e;if(w(e)){if(-1u;u++)if(r(e[u],s)){l=!0;break}if(l)for(u=0,c=t.length;c>u;u++)if(r(t[u],s)){l=!1;break}if(l)return i;throw di("insecurl",i.toString())}if(n===hi.HTML)return o(i);throw di("unsafe")},valueOf:function(e){return e instanceof s?e.$$unwrapTrustedValue():e}}}]}function Qt(){var e=!0;this.enabled=function(t){return arguments.length&&(e=!!t),e},this.$get=["$parse","$sceDelegate",function(t,n){if(e&&8>Rn)throw di("iequirks");var r=V(hi);r.isEnabled=function(){return e},r.trustAs=n.trustAs,r.getTrusted=n.getTrusted,r.valueOf=n.valueOf,e||(r.trustAs=r.getTrusted=function(e,t){return t},r.valueOf=m),r.parseAs=function(e,n){var i=t(n);return i.literal&&i.constant?i:t(n,function(t){return r.getTrusted(e,t)})};var i=r.parseAs,s=r.getTrusted,a=r.trustAs;return o(hi,function(e,t){var n=Un(t);r[pe("parse_as_"+n)]=function(t){return i(e,t)},r[pe("get_trusted_"+n)]=function(t){return s(e,t)},r[pe("trust_as_"+n)]=function(t){return a(e,t)}}),r}]}function en(){this.$get=["$window","$document",function(e,t){var n,r={},i=p((/android (\d+)/.exec(Un((e.navigator||{}).userAgent))||[])[1]),o=/Boxee/i.test((e.navigator||{}).userAgent),s=t[0]||{},a=/^(Moz|webkit|ms)(?=[A-Z])/,u=s.body&&s.body.style,c=!1,l=!1;if(u){for(var f in u)if(c=a.exec(f)){n=c[0],n=n.substr(0,1).toUpperCase()+n.substr(1);break}n||(n="WebkitOpacity"in u&&"webkit"),c=!!("transition"in u||n+"Transition"in u),l=!!("animation"in u||n+"Animation"in u),!i||c&&l||(c=w(u.webkitTransition),l=w(u.webkitAnimation))}return{history:!(!e.history||!e.history.pushState||4>i||o),hasEvent:function(e){if("input"===e&&11>=Rn)return!1;if($(r[e])){var t=s.createElement("div");r[e]="on"+e in t}return r[e]},csp:sr(),vendorPrefix:n,transitions:c,animations:l,android:i}}]}function tn(){this.$get=["$templateCache","$http","$q","$sce",function(e,t,n,r){function i(o,s){i.totalPendingRequests++,w(o)&&e.get(o)||(o=r.getTrustedResourceUrl(o));var a=t.defaults&&t.defaults.transformResponse;return nr(a)?a=a.filter(function(e){return e!==it}):a===it&&(a=null),t.get(o,{cache:e,transformResponse:a})["finally"](function(){i.totalPendingRequests--}).then(function(t){return e.put(o,t.data),t.data},function(e){if(!s)throw Ir("tpload",o,e.status,e.statusText);return n.reject(e)})}return i.totalPendingRequests=0,i}]}function nn(){this.$get=["$rootScope","$browser","$location",function(e,t,n){return{findBindings:function(e,t,n){e=e.getElementsByClassName("ng-binding");var r=[];return o(e,function(e){var i=Qn.element(e).data("$binding");i&&o(i,function(i){n?new RegExp("(^|\\s)"+or(t)+"(\\s|\\||$)").test(i)&&r.push(e):-1!=i.indexOf(t)&&r.push(e)})}),r},findModels:function(e,t,n){for(var r=["ng-","data-ng-","ng\\:"],i=0;i0&&(u=t(o.substring(0,a)),$(r[u])&&(r[u]=t(o.substring(a+1))));return r}}function cn(){this.$get=un}function ln(e){function t(n,r){if(b(n)){var i={};return o(n,function(e,n){i[n]=t(n,e)}),i}return e.factory(n+"Filter",r)}this.register=t,this.$get=["$injector",function(e){return function(t){return e.get(t+"Filter")}}],t("currency",mn),t("date",Sn),t("filter",fn),t("json",En),t("limitTo",kn),t("lowercase",xi),t("number",gn),t("orderBy",Tn),t("uppercase",wi)}function fn(){return function(e,t,n){if(!i(e)){if(null==e)return e;throw r("filter")("notarray",e)}var o;switch(hn(t)){case"function":break;case"boolean":case"null":case"number":case"string":o=!0;case"object":t=pn(t,n,o);break;default:return e}return Array.prototype.filter.call(e,t)}}function pn(e,t,n){var r=b(e)&&"$"in e;return!0===t?t=L:E(t)||(t=function(e,t){return $(e)?!1:null===e||null===t?e===t:b(t)||b(e)&&!v(e)?!1:(e=Un(""+e),t=Un(""+t),-1!==e.indexOf(t))}),function(i){return r&&!b(i)?dn(i,e.$,t,!1):dn(i,e,t,n)}}function dn(e,t,n,r,i){var o=hn(e),s=hn(t);if("string"===s&&"!"===t.charAt(0))return!dn(e,t.substring(1),n,r);if(nr(e))return e.some(function(e){return dn(e,t,n,r)});switch(o){case"object":var a;if(r){for(a in e)if("$"!==a.charAt(0)&&dn(e[a],t,n,!0))return!0;return i?!1:dn(e,t,n,!1)}if("object"===s){for(a in t)if(i=t[a],!E(i)&&!$(i)&&(o="$"===a,!dn(o?e:e[a],i,n,o,o)))return!1;return!0}return n(e,t);case"function":return!1;default:return n(e,t)}}function hn(e){return null===e?"null":typeof e}function mn(e){var t=e.NUMBER_FORMATS;return function(e,n,r){return $(n)&&(n=t.CURRENCY_SYM),$(r)&&(r=t.PATTERNS[1].maxFrac),null==e?e:vn(e,t.PATTERNS[1],t.GROUP_SEP,t.DECIMAL_SEP,r).replace(/\u00A4/g,n)}}function gn(e){var t=e.NUMBER_FORMATS;return function(e,n){return null==e?e:vn(e,t.PATTERNS[0],t.GROUP_SEP,t.DECIMAL_SEP,n)}}function vn(e,t,n,r,i){if(b(e))return"";var o=0>e;e=Math.abs(e);var s=1/0===e;if(!s&&!isFinite(e))return"";var a=e+"",u="",c=!1,l=[];if(s&&(u="∞"),!s&&-1!==a.indexOf("e")){var f=a.match(/([\d\.]+)e(-?)(\d+)/);f&&"-"==f[2]&&f[3]>i+1?e=0:(u=a,c=!0)}if(s||c)i>0&&1>e&&(u=e.toFixed(i),e=parseFloat(u),u=u.replace(vi,r));else{s=(a.split(vi)[1]||"").length,$(i)&&(i=Math.min(Math.max(t.minFrac,s),t.maxFrac)),e=+(Math.round(+(e.toString()+"e"+i)).toString()+"e"+-i);var s=(""+e).split(vi),a=s[0],s=s[1]||"",f=0,p=t.lgSize,d=t.gSize;if(a.length>=p+d)for(f=a.length-p,c=0;f>c;c++)0===(f-c)%d&&0!==c&&(u+=n),u+=a.charAt(c);for(c=f;ce&&(r="-",e=-e),e=""+e;e.length0||i>-n)&&(i+=n),0===i&&-12==n&&(i=12),$n(i,t,r)}}function bn(e,t){return function(n,r){var i=n["get"+e](),o=Wn(t?"SHORT"+e:e);return r[o][i]}}function xn(e){var t=new Date(e,0,1).getDay();return new Date(e,0,(4>=t?5:12)-t)}function wn(e){return function(t){var n=xn(t.getFullYear());return t=+new Date(t.getFullYear(),t.getMonth(),t.getDate()+(4-t.getDay()))-+n,t=1+Math.round(t/6048e5),$n(t,e)}}function Cn(e,t){return 0>=e.getFullYear()?t.ERAS[0]:t.ERAS[1]}function Sn(e){function t(e){var t;if(t=e.match(n)){e=new Date(0);var r=0,i=0,o=t[8]?e.setUTCFullYear:e.setFullYear,s=t[8]?e.setUTCHours:e.setHours;t[9]&&(r=p(t[9]+t[10]),i=p(t[9]+t[11])),o.call(e,p(t[1]),p(t[2])-1,p(t[3])),r=p(t[4]||0)-r,i=p(t[5]||0)-i,o=p(t[6]||0),t=Math.round(1e3*parseFloat("0."+(t[7]||0))),s.call(e,r,i,o,t)}return e}var n=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;return function(n,r,i){var s,a,u="",c=[];if(r=r||"mediumDate",r=e.DATETIME_FORMATS[r]||r,w(n)&&(n=bi.test(n)?p(n):t(n)),C(n)&&(n=new Date(n)),!S(n)||!isFinite(n.getTime()))return n;for(;r;)(a=yi.exec(r))?(c=F(c,a,1),r=c.pop()):(c.push(r),r=null);var l=n.getTimezoneOffset();return i&&(l=_(i,n.getTimezoneOffset()),n=U(n,i,!0)),o(c,function(t){s=$i[t],u+=s?s(n,e.DATETIME_FORMATS,l):t.replace(/(^'|'$)/g,"").replace(/''/g,"'")}),u}}function En(){return function(e,t){return $(t)&&(t=2),H(e,t)}}function kn(){return function(e,t,n){return t=1/0===Math.abs(Number(t))?Number(t):p(t),isNaN(t)?e:(C(e)&&(e=e.toString()),nr(e)||w(e)?(n=!n||isNaN(n)?0:p(n),n=0>n?Math.max(0,e.length+n):n,t>=0?e.slice(n,n+t):0===n?e.slice(t,e.length):e.slice(Math.max(0,n+t),n)):e)}}function Tn(e){function t(t,n){return n=n?-1:1,t.map(function(t){var r=1,i=m;if(E(t))i=t;else if(w(t)&&(("+"==t.charAt(0)||"-"==t.charAt(0))&&(r="-"==t.charAt(0)?-1:1,t=t.substring(1)),""!==t&&(i=e(t),i.constant)))var o=i(),i=function(e){return e[o]};return{get:i,descending:r*n}})}function n(e){switch(typeof e){case"number":case"boolean":case"string":return!0;default:return!1}}return function(e,r,o){if(!i(e))return e;nr(r)||(r=[r]),0===r.length&&(r=["+"]);var s=t(r,o);return s.push({get:function(){return{}},descending:o?-1:1}),e=Array.prototype.map.call(e,function(e,t){return{value:e,predicateValues:s.map(function(r){var i=r.get(e);return r=typeof i,null===i?(r="string",i="null"):"string"===r?i=i.toLowerCase():"object"===r&&("function"==typeof i.valueOf&&(i=i.valueOf(),n(i))||v(i)&&(i=i.toString(),n(i))||(i=t)),{value:i,type:r}})}}),e.sort(function(e,t){for(var n=0,r=0,i=s.length;i>r;++r){var n=e.predicateValues[r],o=t.predicateValues[r],a=0;if(n.type===o.type?n.value!==o.value&&(a=n.value15&&19>t||t>=37&&40>=t||l(e,this,this.value)}),i.hasEvent("paste")&&t.on("paste cut",l)}t.on("change",u),r.$render=function(){var e=r.$isEmpty(r.$viewValue)?"":r.$viewValue;t.val()!==e&&t.val(e)}}function jn(e,t){return function(n,r){var i,s;if(S(n))return n;if(w(n)){if('"'==n.charAt(0)&&'"'==n.charAt(n.length-1)&&(n=n.substring(1,n.length-1)),Ni.test(n))return new Date(n);if(e.lastIndex=0,i=e.exec(n))return i.shift(),s=r?{yyyy:r.getFullYear(),MM:r.getMonth()+1,dd:r.getDate(),HH:r.getHours(),mm:r.getMinutes(),ss:r.getSeconds(),sss:r.getMilliseconds()/1e3}:{yyyy:1970,MM:1,dd:1,HH:0,mm:0,ss:0,sss:0},o(i,function(e,n){n=g},a.$observe("min",function(e){g=d(e),u.$validate()})}if(y(a.max)||a.ngMax){var v;u.$validators.max=function(e){return!p(e)||$(v)||r(e)<=v},a.$observe("max",function(e){v=d(e),u.$validate()})}}}function Pn(e,t,r,i){(i.$$hasNativeValidators=b(t[0].validity))&&i.$parsers.push(function(e){var r=t.prop("validity")||{};return r.badInput&&!r.typeMismatch?n:e})}function qn(e,t,n,r,i){if(y(r)){if(e=e(r),!e.constant)throw co("constexpr",n,r);return e(t)}return i}function Vn(e,t){return e="ngClass"+e,["$animate",function(n){function r(e,t){var n=[],r=0;e:for(;r0||n[e])&&(n[e]=(n[e]||0)+t,n[e]===+(t>0)&&r.push(e))}),a.data("$classCounts",n),r.join(" ")}function l(e){if(!0===t||s.$index%2===t){var o=i(e||[]);if(f){if(!L(e,f)){var l=i(f),p=r(o,l),o=r(l,o),p=c(p,1),o=c(o,-1);p&&p.length&&n.addClass(a,p),o&&o.length&&n.removeClass(a,o)}}else{var p=c(o,1);u.$addClass(p)}}f=V(e)}var f;s.$watch(u[e],l,!0),u.$observe("class",function(t){l(s.$eval(u[e]))}),"ngClass"!==e&&s.$watch("$index",function(n,r){var o=1&n;if(o!==(1&r)){var a=i(s.$eval(u[e]));o===t?(o=c(a,1),u.$addClass(o)):(o=c(a,-1),u.$removeClass(o))}})}}}]}function Ln(e){function t(e,t){t&&!s[e]?(c.addClass(o,e),s[e]=!0):!t&&s[e]&&(c.removeClass(o,e),s[e]=!1)}function r(e,n){e=e?"-"+ne(e,"-"):"",t(io+e,!0===n),t(oo+e,!1===n)}var i=e.ctrl,o=e.$element,s={},a=e.set,u=e.unset,c=e.$animate;s[oo]=!(s[io]=o.hasClass(io)),i.$setValidity=function(e,o,s){$(o)?(i.$pending||(i.$pending={}),a(i.$pending,e,s)):(i.$pending&&u(i.$pending,e,s),Fn(i.$pending)&&(i.$pending=n)),N(o)?o?(u(i.$error,e,s),a(i.$$success,e,s)):(a(i.$error,e,s),u(i.$$success,e,s)):(u(i.$error,e,s),u(i.$$success,e,s)),i.$pending?(t(uo,!0),i.$valid=i.$invalid=n,r("",null)):(t(uo,!1),i.$valid=Fn(i.$error),i.$invalid=!i.$valid,r("",i.$valid)),o=i.$pending&&i.$pending[e]?n:i.$error[e]?!1:i.$$success[e]?!0:null,r(e,o),i.$$parentForm.$setValidity(e,o,i)}}function Fn(e){if(e)for(var t in e)if(e.hasOwnProperty(t))return!1;return!0}var Rn,In,Hn,Bn,_n=/^\/(.+)\/([a-z]*)$/,Un=function(e){return w(e)?e.toLowerCase():e},zn=Object.prototype.hasOwnProperty,Wn=function(e){return w(e)?e.toUpperCase():e},Gn=[].slice,Xn=[].splice,Yn=[].push,Jn=Object.prototype.toString,Kn=Object.getPrototypeOf,Zn=r("ng"),Qn=e.angular||(e.angular={}),er=0;Rn=t.documentMode,h.$inject=[],m.$inject=[];var tr,nr=Array.isArray,rr=/^\[object (?:Uint8|Uint8Clamped|Uint16|Uint32|Int8|Int16|Int32|Float32|Float64)Array\]$/,ir=function(e){return w(e)?e.trim():e},or=function(e){return e.replace(/([-()\[\]{}+?*.$\^|,:#n;++n)if(r=ur[n],e=t.querySelector("["+r.replace(":","\\:")+"jq]")){i=e.getAttribute(r+"jq");break}return ar.name_=i},ur=["ng-","data-ng-","ng:","x-ng-"],cr=/[A-Z]/g,lr=!1,fr=3,pr={full:"1.4.8",major:1,minor:4,dot:8,codeName:"ice-manipulation"};me.expando="ng339";var dr=me.cache={},hr=1;me._data=function(e){return this.cache[e[this.expando]]||{}};var mr=/([\:\-\_]+(.))/g,gr=/^moz([A-Z])/,vr={mouseleave:"mouseout",mouseenter:"mouseover"},$r=r("jqLite"),yr=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,br=/<|&#?\w+;/,xr=/<([\w:-]+)/,wr=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,Cr={option:[1,'"],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};Cr.optgroup=Cr.option,Cr.tbody=Cr.tfoot=Cr.colgroup=Cr.caption=Cr.thead,Cr.th=Cr.td;var Sr=Node.prototype.contains||function(e){return!!(16&this.compareDocumentPosition(e))},Er=me.prototype={ready:function(n){function r(){i||(i=!0,n())}var i=!1;"complete"===t.readyState?setTimeout(r):(this.on("DOMContentLoaded",r),me(e).on("load",r))},toString:function(){var e=[];return o(this,function(t){e.push(""+t)}),"["+e.join(", ")+"]"},eq:function(e){return In(e>=0?this[e]:this[this.length+e])},length:0,push:Yn,sort:[].sort,splice:[].splice},kr={};o("multiple selected checked disabled readOnly required open".split(" "),function(e){kr[Un(e)]=e});var Tr={};o("input select option textarea button form details".split(" "),function(e){Tr[e]=!0});var Ar={ngMinlength:"minlength",ngMaxlength:"maxlength",ngMin:"min",ngMax:"max",ngPattern:"pattern"};o({data:xe,removeData:ye,hasData:function(e){for(var t in dr[e.ng339])return!0;return!1}},function(e,t){me[t]=e}),o({data:xe,inheritedData:Te,scope:function(e){return In.data(e,"$scope")||Te(e.parentNode||e,["$isolateScope","$scope"])},isolateScope:function(e){return In.data(e,"$isolateScope")||In.data(e,"$isolateScopeNoTemplate")},controller:ke,injector:function(e){return Te(e,"$injector")},removeAttr:function(e,t){e.removeAttribute(t)},hasClass:we,css:function(e,t,n){return t=pe(t),y(n)?void(e.style[t]=n):e.style[t]},attr:function(e,t,r){var i=e.nodeType;if(i!==fr&&2!==i&&8!==i)if(i=Un(t),kr[i]){if(!y(r))return e[t]||(e.attributes.getNamedItem(t)||h).specified?i:n;r?(e[t]=!0,e.setAttribute(t,i)):(e[t]=!1,e.removeAttribute(i))}else if(y(r))e.setAttribute(t,r);else if(e.getAttribute)return e=e.getAttribute(t,2),null===e?n:e},prop:function(e,t,n){return y(n)?void(e[t]=n):e[t]},text:function(){function e(e,t){if($(t)){var n=e.nodeType;return 1===n||n===fr?e.textContent:""}e.textContent=t}return e.$dv="",e}(),val:function(e,t){if($(t)){if(e.multiple&&"select"===D(e)){var n=[];return o(e.options,function(e){e.selected&&n.push(e.value||e.text)}),0===n.length?null:n}return e.value}e.value=t},html:function(e,t){return $(t)?e.innerHTML:(ve(e,!0),void(e.innerHTML=t))},empty:Ae},function(e,t){me.prototype[t]=function(t,n){var r,i,o=this.length;if(e!==Ae&&$(2==e.length&&e!==we&&e!==ke?t:n)){if(b(t)){for(r=0;o>r;r++)if(e===xe)e(this[r],t);else for(i in t)e(this[r],i,t[i]);return this}for(r=e.$dv,o=$(r)?Math.min(o,1):o,i=0;o>i;i++){var s=e(this[i],t,n);r=r?r+s:s}return r}for(r=0;o>r;r++)e(this[r],t,n);return this}}),o({removeData:ye,on:function(e,t,r,i){if(y(i))throw $r("onargs");if(de(e)){i=be(e,!0);var o=i.events,s=i.handle;s||(s=i.handle=je(e,o)),i=0<=t.indexOf(" ")?t.split(" "):[t];for(var a=i.length,u=function(t,n,i){var a=o[t];a||(a=o[t]=[],a.specialHandlerWrapper=n,"$destroy"===t||i||e.addEventListener(t,s,!1)),a.push(r)};a--;)t=i[a],vr[t]?(u(vr[t],Pe),u(t,n,!0)):u(t)}},off:$e,one:function(e,t,n){e=In(e),e.on(t,function r(){e.off(t,n),e.off(t,r)}),e.on(t,n)},replaceWith:function(e,t){var n,r=e.parentNode;ve(e),o(new me(t),function(t){n?r.insertBefore(t,n.nextSibling):r.replaceChild(t,e),n=t})},children:function(e){var t=[];return o(e.childNodes,function(e){1===e.nodeType&&t.push(e)}),t},contents:function(e){return e.contentDocument||e.childNodes||[]},append:function(e,t){var n=e.nodeType;if(1===n||11===n){t=new me(t);for(var n=0,r=t.length;r>n;n++)e.appendChild(t[n])}},prepend:function(e,t){if(1===e.nodeType){var n=e.firstChild;o(new me(t),function(t){e.insertBefore(t,n)})}},wrap:function(e,t){t=In(t).eq(0).clone()[0];var n=e.parentNode;n&&n.replaceChild(t,e),t.appendChild(e)},remove:Ne,detach:function(e){Ne(e,!0)},after:function(e,t){var n=e,r=e.parentNode;t=new me(t);for(var i=0,o=t.length;o>i;i++){var s=t[i];r.insertBefore(s,n.nextSibling),n=s}},addClass:Se,removeClass:Ce,toggleClass:function(e,t,n){t&&o(t.split(" "),function(t){var r=n;$(r)&&(r=!we(e,t)),(r?Se:Ce)(e,t)})},parent:function(e){return(e=e.parentNode)&&11!==e.nodeType?e:null},next:function(e){return e.nextElementSibling},find:function(e,t){return e.getElementsByTagName?e.getElementsByTagName(t):[]},clone:ge,triggerHandler:function(e,t,n){var r,i,s=t.type||t,a=be(e);(a=(a=a&&a.events)&&a[s])&&(r={preventDefault:function(){this.defaultPrevented=!0},isDefaultPrevented:function(){return!0===this.defaultPrevented},stopImmediatePropagation:function(){this.immediatePropagationStopped=!0},isImmediatePropagationStopped:function(){return!0===this.immediatePropagationStopped},stopPropagation:h,type:s,target:e},t.type&&(r=l(r,t)),t=V(a),i=n?[r].concat(n):[r],o(t,function(t){r.isImmediatePropagationStopped()||t.apply(e,i)}))}},function(e,t){me.prototype[t]=function(t,n,r){for(var i,o=0,s=this.length;s>o;o++)$(i)?(i=e(this[o],t,n,r),y(i)&&(i=In(i))):Ee(i,e(this[o],t,n,r));return y(i)?i:this},me.prototype.bind=me.prototype.on,me.prototype.unbind=me.prototype.off}),Le.prototype={put:function(e,t){this[Ve(e,this.nextUid)]=t},get:function(e){return this[Ve(e,this.nextUid)]},remove:function(e){var t=this[e=Ve(e,this.nextUid)];return delete this[e],t}};var Nr=[function(){this.$get=[function(){return Le}]}],Or=/^[^\(]*\(\s*([^\)]*)\)/m,Mr=/,/,jr=/^\s*(_?)(\S+?)\1\s*$/,Dr=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm,Pr=r("$injector");Re.$$annotate=function(e,t,n){var r;if("function"==typeof e){if(!(r=e.$inject)){if(r=[],e.length){if(t)throw w(n)&&n||(n=e.name||Fe(e)),Pr("strictdi",n);t=e.toString().replace(Dr,""),t=t.match(Or),o(t[1].split(Mr),function(e){e.replace(jr,function(e,t,n){r.push(n)})})}e.$inject=r}}else nr(e)?(t=e.length-1,oe(e[t],"fn"),r=e.slice(0,t)):oe(e,"fn",!0);return r};var qr=r("$animate"),Vr=function(){this.$get=["$q","$$rAF",function(e,t){function n(){}return n.all=h,n.chain=h,n.prototype={end:h,cancel:h,resume:h,pause:h,complete:h,then:function(n,r){return e(function(e){t(function(){e()})}).then(n,r)}},n}]},Lr=function(){var e=new Le,t=[];this.$get=["$$AnimateRunner","$rootScope",function(n,r){function i(e,t,n){var r=!1;return t&&(t=w(t)?t.split(" "):nr(t)?t:[],o(t,function(t){t&&(r=!0,e[t]=n)})),r}function s(){o(t,function(t){var n=e.get(t);if(n){var r=Be(t.attr("class")),i="",s="";o(n,function(e,t){e!==!!r[t]&&(e?i+=(i.length?" ":"")+t:s+=(s.length?" ":"")+t)}),o(t,function(e){i&&Se(e,i),s&&Ce(e,s)}),e.remove(t)}}),t.length=0}return{enabled:h,on:h,off:h,pin:h,push:function(o,a,u,c){return c&&c(),u=u||{},u.from&&o.css(u.from),u.to&&o.css(u.to),(u.addClass||u.removeClass)&&(a=u.addClass,c=u.removeClass,u=e.get(o)||{},a=i(u,a,!0),c=i(u,c,!1),(a||c)&&(e.put(o,u),t.push(o),1===t.length&&r.$$postDigest(s))),new n}}}]},Fr=["$provide",function(e){var t=this;this.$$registeredAnimations=Object.create(null),this.register=function(n,r){if(n&&"."!==n.charAt(0))throw qr("notcsel",n);var i=n+"-animation";t.$$registeredAnimations[n.substr(1)]=i,e.factory(i,r)},this.classNameFilter=function(e){if(1===arguments.length&&(this.$$classNameFilter=e instanceof RegExp?e:null)&&/(\s+|\/)ng-animate(\s+|\/)/.test(this.$$classNameFilter.toString()))throw qr("nongcls","ng-animate");return this.$$classNameFilter},this.$get=["$$animateQueue",function(e){function t(e,t,n){if(n){var r;e:{for(r=0;r <= >= && || ! = |".split(" "),function(e){ai[e]=!0});var ui={n:"\n",f:"\f",r:"\r",t:" ",v:"\x0B","'":"'",'"':'"'},ci=function(e){this.options=e};ci.prototype={constructor:ci,lex:function(e){for(this.text=e,this.index=0,this.tokens=[];this.index="0"&&"9">=e&&"string"==typeof e},isWhitespace:function(e){return" "===e||"\r"===e||" "===e||"\n"===e||"\x0B"===e||" "===e},isIdent:function(e){return e>="a"&&"z">=e||e>="A"&&"Z">=e||"_"===e||"$"===e},isExpOperator:function(e){return"-"===e||"+"===e||this.isNumber(e)},throwError:function(e,t,n){throw n=n||this.index,t=y(t)?"s "+t+"-"+this.index+" ["+this.text.substring(t,n)+"]":" "+n,ri("lexerr",e,t,this.text)},readNumber:function(){for(var e="",t=this.index;this.index","<=",">=");)t={type:li.BinaryExpression,operator:e.text,left:t,right:this.additive()};return t},additive:function(){for(var e,t=this.multiplicative();e=this.expect("+","-");)t={type:li.BinaryExpression,operator:e.text,left:t,right:this.multiplicative()};return t},multiplicative:function(){for(var e,t=this.unary();e=this.expect("*","/","%");)t={type:li.BinaryExpression,operator:e.text,left:t,right:this.unary()};return t},unary:function(){var e;return(e=this.expect("+","-","!"))?{type:li.UnaryExpression,operator:e.text,prefix:!0,argument:this.unary()}:this.primary()},primary:function(){var e;this.expect("(")?(e=this.filterChain(),this.consume(")")):this.expect("[")?e=this.arrayDeclaration():this.expect("{")?e=this.object():this.constants.hasOwnProperty(this.peek().text)?e=q(this.constants[this.consume().text]):this.peek().identifier?e=this.identifier():this.peek().constant?e=this.constant():this.throwError("not a primary expression",this.peek());for(var t;t=this.expect("(","[",".");)"("===t.text?(e={type:li.CallExpression,callee:e,arguments:this.parseArguments()},this.consume(")")):"["===t.text?(e={type:li.MemberExpression,object:e,property:this.expression(),computed:!0},this.consume("]")):"."===t.text?e={type:li.MemberExpression,object:e,property:this.identifier(),computed:!1}:this.throwError("IMPOSSIBLE");return e},filter:function(e){e=[e];for(var t={type:li.CallExpression,callee:this.identifier(),arguments:e,filter:!0};this.expect(":");)e.push(this.expression());return t},parseArguments:function(){var e=[];if(")"!==this.peekToken().text)do e.push(this.expression());while(this.expect(","));return e},identifier:function(){var e=this.consume();return e.identifier||this.throwError("is not a valid identifier",e),{type:li.Identifier,name:e.text}},constant:function(){return{type:li.Literal,value:this.consume().value}},arrayDeclaration:function(){var e=[];if("]"!==this.peekToken().text)do{if(this.peek("]"))break;e.push(this.expression())}while(this.expect(","));return this.consume("]"),{type:li.ArrayExpression,elements:e}},object:function(){var e,t=[];if("}"!==this.peekToken().text)do{if(this.peek("}"))break;e={type:li.Property,kind:"init"},this.peek().constant?e.key=this.constant():this.peek().identifier?e.key=this.identifier():this.throwError("invalid key",this.peek()),this.consume(":"),e.value=this.expression(),t.push(e)}while(this.expect(","));return this.consume("}"),{type:li.ObjectExpression,properties:t}},throwError:function(e,t){throw ri("syntax",t.text,e,t.index+1,this.text,this.text.substring(t.index))},consume:function(e){if(0===this.tokens.length)throw ri("ueoe",this.text);var t=this.expect(e);return t||this.throwError("is unexpected, expecting ["+e+"]",this.peek()),t},peekToken:function(){if(0===this.tokens.length)throw ri("ueoe",this.text);return this.tokens[0]},peek:function(e,t,n,r){return this.peekAhead(0,e,t,n,r)},peekAhead:function(e,t,n,r,i){if(this.tokens.length>e){e=this.tokens[e];var o=e.text;if(o===t||o===n||o===r||o===i||!(t||n||r||i))return e}return!1},expect:function(e,t,n,r){return(e=this.peek(e,t,n,r))?(this.tokens.shift(),e):!1},constants:{"true":{type:li.Literal,value:!0},"false":{type:li.Literal,value:!1},"null":{type:li.Literal,value:null},undefined:{type:li.Literal,value:n},"this":{type:li.ThisExpression}}},Rt.prototype={compile:function(e,t){var r=this,i=this.astBuilder.ast(e);this.state={nextId:0,filters:{},expensiveChecks:t,fn:{vars:[],body:[],own:{}},assign:{vars:[],body:[],own:{}},inputs:[]},Pt(i,r.$filter);var s,a="";return this.stage="assign",(s=Lt(i))&&(this.state.computing="assign",a=this.nextId(),this.recurse(s,a),this.return_(a),a="fn.assign="+this.generateFunction("assign","s,v,l")),s=qt(i.body),r.stage="inputs",o(s,function(e,t){var n="fn"+t;r.state[n]={vars:[],body:[],own:{}},r.state.computing=n;var i=r.nextId();r.recurse(e,i),r.return_(i),r.state.inputs.push(n),e.watchId=t}),this.state.computing="fn",this.stage="main",this.recurse(i),a='"'+this.USE+" "+this.STRICT+'";\n'+this.filterPrefix()+"var fn="+this.generateFunction("fn","s,l,a,i")+a+this.watchFns()+"return fn;",a=new Function("$filter","ensureSafeMemberName","ensureSafeObject","ensureSafeFunction","getStringValue","ensureSafeAssignContext","ifDefined","plus","text",a)(this.$filter,Tt,Nt,Ot,At,Mt,jt,Dt,e),this.state=this.stage=n,a.literal=Ft(i),a.constant=i.constant,a},USE:"use",STRICT:"strict",watchFns:function(){var e=[],t=this.state.inputs,n=this;return o(t,function(t){e.push("var "+t+"="+n.generateFunction(t,"s"))}),t.length&&e.push("fn.inputs=["+t.join(",")+"];"),e.join("")},generateFunction:function(e,t){return"function("+t+"){"+this.varsPrefix(e)+this.body(e)+"};"},filterPrefix:function(){var e=[],t=this;return o(this.state.filters,function(n,r){e.push(n+"=$filter("+t.escape(r)+")")}),e.length?"var "+e.join(",")+";":""},varsPrefix:function(e){return this.state[e].vars.length?"var "+this.state[e].vars.join(",")+";":""},body:function(e){return this.state[e].body.join("")},recurse:function(e,t,r,i,s,a){var u,c,l,f,p=this;if(i=i||h,!a&&y(e.watchId))t=t||this.nextId(),this.if_("i",this.lazyAssign(t,this.computedMember("i",e.watchId)),this.lazyRecurse(e,t,r,i,s,!0));else switch(e.type){case li.Program:o(e.body,function(t,r){p.recurse(t.expression,n,n,function(e){c=e}),r!==e.body.length-1?p.current().body.push(c,";"):p.return_(c)});break;case li.Literal:f=this.escape(e.value),this.assign(t,f),i(f);break;case li.UnaryExpression:this.recurse(e.argument,n,n,function(e){c=e}),f=e.operator+"("+this.ifDefined(c,0)+")",this.assign(t,f),i(f);break;case li.BinaryExpression:this.recurse(e.left,n,n,function(e){u=e}),this.recurse(e.right,n,n,function(e){c=e}),f="+"===e.operator?this.plus(u,c):"-"===e.operator?this.ifDefined(u,0)+e.operator+this.ifDefined(c,0):"("+u+")"+e.operator+"("+c+")",this.assign(t,f),i(f);break;case li.LogicalExpression:t=t||this.nextId(),p.recurse(e.left,t),p.if_("&&"===e.operator?t:p.not(t),p.lazyRecurse(e.right,t)),i(t);break;case li.ConditionalExpression:t=t||this.nextId(),p.recurse(e.test,t),p.if_(t,p.lazyRecurse(e.alternate,t),p.lazyRecurse(e.consequent,t)),i(t);break;case li.Identifier:t=t||this.nextId(),r&&(r.context="inputs"===p.stage?"s":this.assign(this.nextId(),this.getHasOwnProperty("l",e.name)+"?l:s"),r.computed=!1,r.name=e.name),Tt(e.name),p.if_("inputs"===p.stage||p.not(p.getHasOwnProperty("l",e.name)),function(){p.if_("inputs"===p.stage||"s",function(){s&&1!==s&&p.if_(p.not(p.nonComputedMember("s",e.name)),p.lazyAssign(p.nonComputedMember("s",e.name),"{}")),p.assign(t,p.nonComputedMember("s",e.name))})},t&&p.lazyAssign(t,p.nonComputedMember("l",e.name))),(p.state.expensiveChecks||Ht(e.name))&&p.addEnsureSafeObject(t),i(t);break;case li.MemberExpression:u=r&&(r.context=this.nextId())||this.nextId(),t=t||this.nextId(),p.recurse(e.object,u,n,function(){p.if_(p.notNull(u),function(){e.computed?(c=p.nextId(),p.recurse(e.property,c),p.getStringValue(c),p.addEnsureSafeMemberName(c),s&&1!==s&&p.if_(p.not(p.computedMember(u,c)),p.lazyAssign(p.computedMember(u,c),"{}")),f=p.ensureSafeObject(p.computedMember(u,c)),p.assign(t,f),r&&(r.computed=!0,r.name=c)):(Tt(e.property.name),s&&1!==s&&p.if_(p.not(p.nonComputedMember(u,e.property.name)),p.lazyAssign(p.nonComputedMember(u,e.property.name),"{}")),f=p.nonComputedMember(u,e.property.name),(p.state.expensiveChecks||Ht(e.property.name))&&(f=p.ensureSafeObject(f)),p.assign(t,f),r&&(r.computed=!1,r.name=e.property.name))},function(){p.assign(t,"undefined")}),i(t)},!!s);break;case li.CallExpression:t=t||this.nextId(),e.filter?(c=p.filter(e.callee.name),l=[],o(e.arguments,function(e){var t=p.nextId();p.recurse(e,t),l.push(t)}),f=c+"("+l.join(",")+")",p.assign(t,f),i(t)):(c=p.nextId(),u={},l=[],p.recurse(e.callee,c,u,function(){p.if_(p.notNull(c),function(){p.addEnsureSafeFunction(c),o(e.arguments,function(e){p.recurse(e,p.nextId(),n,function(e){l.push(p.ensureSafeObject(e))})}),u.name?(p.state.expensiveChecks||p.addEnsureSafeObject(u.context),f=p.member(u.context,u.name,u.computed)+"("+l.join(",")+")"):f=c+"("+l.join(",")+")",f=p.ensureSafeObject(f),p.assign(t,f)},function(){p.assign(t,"undefined")}),i(t)}));break;case li.AssignmentExpression:if(c=this.nextId(),u={},!Vt(e.left))throw ri("lval");this.recurse(e.left,n,u,function(){p.if_(p.notNull(u.context),function(){p.recurse(e.right,c),p.addEnsureSafeObject(p.member(u.context,u.name,u.computed)),p.addEnsureSafeAssignContext(u.context),f=p.member(u.context,u.name,u.computed)+e.operator+c,p.assign(t,f),i(t||f)})},1);break;case li.ArrayExpression:l=[],o(e.elements,function(e){p.recurse(e,p.nextId(),n,function(e){l.push(e)})}),f="["+l.join(",")+"]",this.assign(t,f),i(f);break;case li.ObjectExpression:l=[],o(e.properties,function(e){p.recurse(e.value,p.nextId(),n,function(t){l.push(p.escape(e.key.type===li.Identifier?e.key.name:""+e.key.value)+":"+t)})}),f="{"+l.join(",")+"}",this.assign(t,f),i(f);break;case li.ThisExpression:this.assign(t,"s"),i("s");break;case li.NGValueParameter:this.assign(t,"v"),i("v")}},getHasOwnProperty:function(e,t){var n=e+"."+t,r=this.current().own;return r.hasOwnProperty(n)||(r[n]=this.nextId(!1,e+"&&("+this.escape(t)+" in "+e+")")),r[n]},assign:function(e,t){return e?(this.current().body.push(e,"=",t,";"),e):void 0},filter:function(e){return this.state.filters.hasOwnProperty(e)||(this.state.filters[e]=this.nextId(!0)),this.state.filters[e]},ifDefined:function(e,t){return"ifDefined("+e+","+this.escape(t)+")"},plus:function(e,t){return"plus("+e+","+t+")"},return_:function(e){this.current().body.push("return ",e,";")},if_:function(e,t,n){if(!0===e)t();else{var r=this.current().body;r.push("if(",e,"){"),t(),r.push("}"),n&&(r.push("else{"),n(),r.push("}"))}},not:function(e){return"!("+e+")"},notNull:function(e){return e+"!=null"},nonComputedMember:function(e,t){return e+"."+t},computedMember:function(e,t){return e+"["+t+"]"},member:function(e,t,n){return n?this.computedMember(e,t):this.nonComputedMember(e,t)},addEnsureSafeObject:function(e){this.current().body.push(this.ensureSafeObject(e),";")},addEnsureSafeMemberName:function(e){this.current().body.push(this.ensureSafeMemberName(e),";")},addEnsureSafeFunction:function(e){this.current().body.push(this.ensureSafeFunction(e),";")},addEnsureSafeAssignContext:function(e){this.current().body.push(this.ensureSafeAssignContext(e),";")},ensureSafeObject:function(e){return"ensureSafeObject("+e+",text)"},ensureSafeMemberName:function(e){return"ensureSafeMemberName("+e+",text)"},ensureSafeFunction:function(e){return"ensureSafeFunction("+e+",text)"},getStringValue:function(e){this.assign(e,"getStringValue("+e+",text)")},ensureSafeAssignContext:function(e){return"ensureSafeAssignContext("+e+",text)"},lazyRecurse:function(e,t,n,r,i,o){var s=this;return function(){s.recurse(e,t,n,r,i,o)}},lazyAssign:function(e,t){var n=this;return function(){n.assign(e,t)}},stringEscapeRegex:/[^ a-zA-Z0-9]/g,stringEscapeFn:function(e){return"\\u"+("0000"+e.charCodeAt(0).toString(16)).slice(-4)},escape:function(e){if(w(e))return"'"+e.replace(this.stringEscapeRegex,this.stringEscapeFn)+"'";if(C(e))return e.toString();if(!0===e)return"true";if(!1===e)return"false";if(null===e)return"null";if("undefined"==typeof e)return"undefined";throw ri("esc")},nextId:function(e,t){var n="v"+this.state.nextId++;return e||this.current().vars.push(n+(t?"="+t:"")),n},current:function(){return this.state[this.state.computing]}},It.prototype={compile:function(e,t){var n=this,r=this.astBuilder.ast(e);this.expression=e,this.expensiveChecks=t,Pt(r,n.$filter);var i,s;(i=Lt(r))&&(s=this.recurse(i)),i=qt(r.body);var a;i&&(a=[],o(i,function(e,t){var r=n.recurse(e);e.input=r,a.push(r),e.watchId=t}));var u=[];return o(r.body,function(e){u.push(n.recurse(e.expression))}),i=0===r.body.length?function(){}:1===r.body.length?u[0]:function(e,t){var n;return o(u,function(r){n=r(e,t)}),n},s&&(i.assign=function(e,t,n){return s(e,n,t)}),a&&(i.inputs=a),i.literal=Ft(r),i.constant=r.constant,i},recurse:function(e,t,r){var i,s,a,u=this;if(e.input)return this.inputs(e.input,e.watchId);switch(e.type){case li.Literal:return this.value(e.value,t);case li.UnaryExpression:return s=this.recurse(e.argument),this["unary"+e.operator](s,t);case li.BinaryExpression:return i=this.recurse(e.left),s=this.recurse(e.right),this["binary"+e.operator](i,s,t);case li.LogicalExpression:return i=this.recurse(e.left),s=this.recurse(e.right),this["binary"+e.operator](i,s,t);case li.ConditionalExpression:return this["ternary?:"](this.recurse(e.test),this.recurse(e.alternate),this.recurse(e.consequent),t);case li.Identifier:return Tt(e.name,u.expression),u.identifier(e.name,u.expensiveChecks||Ht(e.name),t,r,u.expression);case li.MemberExpression:return i=this.recurse(e.object,!1,!!r),e.computed||(Tt(e.property.name,u.expression),s=e.property.name),e.computed&&(s=this.recurse(e.property)),e.computed?this.computedMember(i,s,t,r,u.expression):this.nonComputedMember(i,s,u.expensiveChecks,t,r,u.expression);case li.CallExpression:return a=[],o(e.arguments,function(e){a.push(u.recurse(e))}),e.filter&&(s=this.$filter(e.callee.name)),e.filter||(s=this.recurse(e.callee,!0)),e.filter?function(e,r,i,o){for(var u=[],c=0;c":function(e,t,n){return function(r,i,o,s){return r=e(r,i,o,s)>t(r,i,o,s),n?{value:r}:r}},"binary<=":function(e,t,n){return function(r,i,o,s){return r=e(r,i,o,s)<=t(r,i,o,s),n?{value:r}:r}},"binary>=":function(e,t,n){return function(r,i,o,s){return r=e(r,i,o,s)>=t(r,i,o,s),n?{value:r}:r}},"binary&&":function(e,t,n){return function(r,i,o,s){return r=e(r,i,o,s)&&t(r,i,o,s),n?{value:r}:r}},"binary||":function(e,t,n){return function(r,i,o,s){return r=e(r,i,o,s)||t(r,i,o,s),n?{value:r}:r}},"ternary?:":function(e,t,n,r){return function(i,o,s,a){return i=e(i,o,s,a)?t(i,o,s,a):n(i,o,s,a),r?{value:i}:i}},value:function(e,t){return function(){return t?{context:n,name:n,value:e}:e}},identifier:function(e,t,r,i,o){return function(s,a,u,c){return s=a&&e in a?a:s,i&&1!==i&&s&&!s[e]&&(s[e]={}),a=s?s[e]:n,t&&Nt(a,o),r?{context:s,name:e,value:a}:a}},computedMember:function(e,t,n,r,i){return function(o,s,a,u){var c,l,f=e(o,s,a,u);return null!=f&&(c=t(o,s,a,u),c=At(c),Tt(c,i),r&&1!==r&&f&&!f[c]&&(f[c]={}),l=f[c],Nt(l,i)),n?{context:f,name:c,value:l}:l}},nonComputedMember:function(e,t,r,i,o,s){return function(a,u,c,l){return a=e(a,u,c,l),o&&1!==o&&a&&!a[t]&&(a[t]={}),u=null!=a?a[t]:n,(r||Ht(t))&&Nt(u,s),i?{context:a,name:t,value:u}:u}},inputs:function(e,t){return function(n,r,i,o){return o?o[t]:e(n,r,i)}}};var fi=function(e,t,n){this.lexer=e,this.$filter=t,this.options=n,this.ast=new li(this.lexer),this.astCompiler=n.csp?new It(this.ast,t):new Rt(this.ast,t)};fi.prototype={constructor:fi,parse:function(e){return this.astCompiler.compile(e,this.options.expensiveChecks)}},ce(),ce();var pi=Object.prototype.valueOf,di=r("$sce"),hi={HTML:"html",CSS:"css",URL:"url",RESOURCE_URL:"resourceUrl",JS:"js"},Ir=r("$compile"),mi=t.createElement("a"),gi=on(e.location.href);un.$inject=["$document"],ln.$inject=["$provide"],mn.$inject=["$locale"],gn.$inject=["$locale"];var vi=".",$i={yyyy:yn("FullYear",4),yy:yn("FullYear",2,0,!0),y:yn("FullYear",1),MMMM:bn("Month"),MMM:bn("Month",!0),MM:yn("Month",2,1),M:yn("Month",1,1),dd:yn("Date",2),d:yn("Date",1),HH:yn("Hours",2),H:yn("Hours",1),hh:yn("Hours",2,-12),h:yn("Hours",1,-12),mm:yn("Minutes",2),m:yn("Minutes",1),ss:yn("Seconds",2),s:yn("Seconds",1),sss:yn("Milliseconds",3),EEEE:bn("Day"),EEE:bn("Day",!0),a:function(e,t){return 12>e.getHours()?t.AMPMS[0]:t.AMPMS[1]},Z:function(e,t,n){return e=-1*n,e=(e>=0?"+":"")+($n(Math[e>0?"floor":"ceil"](e/60),2)+$n(Math.abs(e%60),2))},ww:wn(2),w:wn(1),G:Cn,GG:Cn,GGG:Cn,GGGG:function(e,t){return 0>=e.getFullYear()?t.ERANAMES[0]:t.ERANAMES[1]}},yi=/((?:[^yMdHhmsaZEwG']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z|G+|w+))(.*)/,bi=/^\-?\d+$/;Sn.$inject=["$locale"];var xi=g(Un),wi=g(Wn);Tn.$inject=["$parse"];var Ci=g({restrict:"E",compile:function(e,t){return t.href||t.xlinkHref?void 0:function(e,t){if("a"===t[0].nodeName.toLowerCase()){var n="[object SVGAnimatedString]"===Jn.call(t.prop("href"))?"xlink:href":"href";t.on("click",function(e){t.attr(n)||e.preventDefault()})}}}}),Si={};o(kr,function(e,t){function n(e,n,i){e.$watch(i[r],function(e){i.$set(t,!!e)})}if("multiple"!=e){var r=Ye("ng-"+t),i=n;"checked"===e&&(i=function(e,t,i){i.ngModel!==i[r]&&n(e,t,i)}),Si[r]=function(){return{restrict:"A",priority:100,link:i}}}}),o(Ar,function(e,t){Si[t]=function(){return{priority:100,link:function(e,n,r){return"ngPattern"===t&&"/"==r.ngPattern.charAt(0)&&(n=r.ngPattern.match(_n))?void r.$set("ngPattern",new RegExp(n[1],n[2])):void e.$watch(r[t],function(e){r.$set(t,e)})}}}}),o(["src","srcset","href"],function(e){var t=Ye("ng-"+e);Si[t]=function(){return{priority:99,link:function(n,r,i){var o=e,s=e;"href"===e&&"[object SVGAnimatedString]"===Jn.call(r.prop("href"))&&(s="xlinkHref",i.$attr[s]="xlink:href",o=null),i.$observe(t,function(t){t?(i.$set(s,t),Rn&&o&&r.prop(o,i[s])):"href"===e&&i.$set(s,null)})}}}});var Ei={$addControl:h,$$renameControl:function(e,t){e.$name=t},$removeControl:h,$setValidity:h,$setDirty:h,$setPristine:h,$setSubmitted:h};Nn.$inject=["$element","$attrs","$scope","$animate","$interpolate"];var ki=function(e){return["$timeout","$parse",function(t,r){function i(e){return""===e?r('this[""]').assign:r(e).assign||h}return{name:"form",restrict:e?"EAC":"E",require:["form","^^?form"],controller:Nn,compile:function(r,o){r.addClass(so).addClass(io);var s=o.name?"name":e&&o.ngForm?"ngForm":!1;return{pre:function(e,r,o,a){var u=a[0];if(!("action"in o)){var c=function(t){e.$apply(function(){u.$commitViewValue(),u.$setSubmitted()}),t.preventDefault()};r[0].addEventListener("submit",c,!1),r.on("$destroy",function(){t(function(){r[0].removeEventListener("submit",c,!1)},0,!1)})}(a[1]||u.$$parentForm).$addControl(u);var f=s?i(u.$name):h;s&&(f(e,u),o.$observe(s,function(t){u.$name!==t&&(f(e,n),u.$$parentForm.$$renameControl(u,t),(f=i(u.$name))(e,u))})),r.on("$destroy",function(){u.$$parentForm.$removeControl(u),f(e,n),l(u,Ei)})}}}}}]},Ti=ki(),Ai=ki(!0),Ni=/\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z)/,Oi=/^[A-Za-z][A-Za-z\d.+-]*:\/*(?:\w+(?::\w+)?@)?[^\s/]+(?::\d+)?(?:\/[\w#!:.?+=&%@\-/]*)?$/,Mi=/^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i,ji=/^\s*(\-|\+)?(\d+|(\d*(\.\d*)))([eE][+-]?\d+)?\s*$/,Di=/^(\d{4})-(\d{2})-(\d{2})$/,Pi=/^(\d{4})-(\d\d)-(\d\d)T(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,qi=/^(\d{4})-W(\d\d)$/,Vi=/^(\d{4})-(\d\d)$/,Li=/^(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,Fi={text:function(e,t,n,r,i,o){Mn(e,t,n,r,i,o),On(r)},date:Dn("date",Di,jn(Di,["yyyy","MM","dd"]),"yyyy-MM-dd"),"datetime-local":Dn("datetimelocal",Pi,jn(Pi,"yyyy MM dd HH mm ss sss".split(" ")),"yyyy-MM-ddTHH:mm:ss.sss"),time:Dn("time",Li,jn(Li,["HH","mm","ss","sss"]),"HH:mm:ss.sss"),week:Dn("week",qi,function(e,t){if(S(e))return e;if(w(e)){qi.lastIndex=0;var n=qi.exec(e);if(n){var r=+n[1],i=+n[2],o=n=0,s=0,a=0,u=xn(r),i=7*(i-1);return t&&(n=t.getHours(),o=t.getMinutes(),s=t.getSeconds(),a=t.getMilliseconds()),new Date(r,0,u.getDate()+i,n,o,s,a)}}return NaN},"yyyy-Www"),month:Dn("month",Vi,jn(Vi,["yyyy","MM"]),"yyyy-MM"),number:function(e,t,r,i,o,s){if(Pn(e,t,r,i),Mn(e,t,r,i,o,s),i.$$parserName="number",i.$parsers.push(function(e){return i.$isEmpty(e)?null:ji.test(e)?parseFloat(e):n}),i.$formatters.push(function(e){if(!i.$isEmpty(e)){if(!C(e))throw co("numfmt",e);e=e.toString()}return e}),y(r.min)||r.ngMin){var a;i.$validators.min=function(e){return i.$isEmpty(e)||$(a)||e>=a},r.$observe("min",function(e){y(e)&&!C(e)&&(e=parseFloat(e,10)),a=C(e)&&!isNaN(e)?e:n,i.$validate()})}if(y(r.max)||r.ngMax){var u;i.$validators.max=function(e){return i.$isEmpty(e)||$(u)||u>=e},r.$observe("max",function(e){y(e)&&!C(e)&&(e=parseFloat(e,10)),u=C(e)&&!isNaN(e)?e:n,i.$validate()})}},url:function(e,t,n,r,i,o){Mn(e,t,n,r,i,o),On(r),r.$$parserName="url",r.$validators.url=function(e,t){var n=e||t;return r.$isEmpty(n)||Oi.test(n)}},email:function(e,t,n,r,i,o){Mn(e,t,n,r,i,o),On(r),r.$$parserName="email",r.$validators.email=function(e,t){var n=e||t;return r.$isEmpty(n)||Mi.test(n)}},radio:function(e,t,n,r){$(n.name)&&t.attr("name",++er),t.on("click",function(e){t[0].checked&&r.$setViewValue(n.value,e&&e.type)}),r.$render=function(){t[0].checked=n.value==r.$viewValue},n.$observe("value",r.$render)},checkbox:function(e,t,n,r,i,o,s,a){var u=qn(a,e,"ngTrueValue",n.ngTrueValue,!0),c=qn(a,e,"ngFalseValue",n.ngFalseValue,!1);t.on("click",function(e){r.$setViewValue(t[0].checked,e&&e.type)}),r.$render=function(){t[0].checked=r.$viewValue},r.$isEmpty=function(e){return!1===e},r.$formatters.push(function(e){return L(e,u)}),r.$parsers.push(function(e){return e?u:c})},hidden:h,button:h,submit:h,reset:h,file:h},Ri=["$browser","$sniffer","$filter","$parse",function(e,t,n,r){return{restrict:"E",require:["?ngModel"],link:{pre:function(i,o,s,a){a[0]&&(Fi[Un(s.type)]||Fi.text)(i,o,s,a[0],t,e,n,r)}}}}],Ii=/^(true|false|\d+)$/,Hi=function(){return{restrict:"A",priority:100,compile:function(e,t){return Ii.test(t.ngValue)?function(e,t,n){n.$set("value",e.$eval(n.ngValue))}:function(e,t,n){e.$watch(n.ngValue,function(e){n.$set("value",e)})}}}},Bi=["$compile",function(e){return{restrict:"AC",compile:function(t){return e.$$addBindingClass(t),function(t,n,r){e.$$addBindingInfo(n,r.ngBind),n=n[0],t.$watch(r.ngBind,function(e){n.textContent=$(e)?"":e})}}}}],_i=["$interpolate","$compile",function(e,t){return{compile:function(n){return t.$$addBindingClass(n),function(n,r,i){n=e(r.attr(i.$attr.ngBindTemplate)),t.$$addBindingInfo(r,n.expressions),r=r[0],i.$observe("ngBindTemplate",function(e){r.textContent=$(e)?"":e})}}}}],Ui=["$sce","$parse","$compile",function(e,t,n){return{restrict:"A",compile:function(r,i){var o=t(i.ngBindHtml),s=t(i.ngBindHtml,function(e){return(e||"").toString()});return n.$$addBindingClass(r),function(t,r,i){n.$$addBindingInfo(r,i.ngBindHtml),t.$watch(s,function(){r.html(e.getTrustedHtml(o(t))||"")})}}}}],zi=g({restrict:"A",require:"ngModel",link:function(e,t,n,r){r.$viewChangeListeners.push(function(){e.$eval(n.ngChange)})}}),Wi=Vn("",!0),Gi=Vn("Odd",0),Xi=Vn("Even",1),Yi=An({compile:function(e,t){t.$set("ngCloak",n),e.removeClass("ng-cloak")}}),Ji=[function(){return{restrict:"A",scope:!0,controller:"@",priority:500}}],Ki={},Zi={blur:!0,focus:!0};o("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "),function(e){var t=Ye("ng-"+e);Ki[t]=["$parse","$rootScope",function(n,r){return{restrict:"A",compile:function(i,o){var s=n(o[t],null,!0);return function(t,n){n.on(e,function(n){var i=function(){s(t,{$event:n})};Zi[e]&&r.$$phase?t.$evalAsync(i):t.$apply(i)})}}}}]});var Qi=["$animate",function(e){return{multiElement:!0,transclude:"element",priority:600,terminal:!0,restrict:"A",$$tlb:!0,link:function(n,r,i,o,s){var a,u,c;n.$watch(i.ngIf,function(n){n?u||s(function(n,o){u=o,n[n.length++]=t.createComment(" end ngIf: "+i.ngIf+" "),a={clone:n},e.enter(n,r.parent(),r)}):(c&&(c.remove(),c=null),u&&(u.$destroy(),u=null),a&&(c=ue(a.clone),e.leave(c).then(function(){c=null}),a=null))})}}}],eo=["$templateRequest","$anchorScroll","$animate",function(e,t,n){return{restrict:"ECA",priority:400,terminal:!0,transclude:"element",controller:Qn.noop,compile:function(r,i){var o=i.ngInclude||i.src,s=i.onload||"",a=i.autoscroll;return function(r,i,u,c,l){var f,p,d,h=0,m=function(){p&&(p.remove(),p=null),f&&(f.$destroy(),f=null),d&&(n.leave(d).then(function(){p=null}),p=d,d=null)};r.$watch(o,function(o){var u=function(){!y(a)||a&&!r.$eval(a)||t()},p=++h;o?(e(o,!0).then(function(e){if(p===h){var t=r.$new();c.template=e,e=l(t,function(e){m(),n.enter(e,null,i).then(u)}),f=t,d=e,f.$emit("$includeContentLoaded",o),r.$eval(s)}},function(){p===h&&(m(),r.$emit("$includeContentError",o))}),r.$emit("$includeContentRequested",o)):(m(),c.template=null)})}}}}],to=["$compile",function(e){return{restrict:"ECA",priority:-400,require:"ngInclude",link:function(n,r,i,o){/SVG/.test(r[0].toString())?(r.empty(),e(he(o.template,t).childNodes)(n,function(e){r.append(e)},{futureParentElement:r +})):(r.html(o.template),e(r.contents())(n))}}}],no=An({priority:450,compile:function(){return{pre:function(e,t,n){e.$eval(n.ngInit)}}}}),ro=function(){return{restrict:"A",priority:100,require:"ngModel",link:function(e,t,r,i){var s=t.attr(r.$attr.ngList)||", ",a="false"!==r.ngTrim,u=a?ir(s):s;i.$parsers.push(function(e){if(!$(e)){var t=[];return e&&o(e.split(u),function(e){e&&t.push(a?ir(e):e)}),t}}),i.$formatters.push(function(e){return nr(e)?e.join(s):n}),i.$isEmpty=function(e){return!e||!e.length}}}},io="ng-valid",oo="ng-invalid",so="ng-pristine",ao="ng-dirty",uo="ng-pending",co=r("ngModel"),lo=["$scope","$exceptionHandler","$attrs","$element","$parse","$animate","$timeout","$rootScope","$q","$interpolate",function(e,t,r,i,s,a,u,c,l,f){this.$modelValue=this.$viewValue=Number.NaN,this.$$rawModelValue=n,this.$validators={},this.$asyncValidators={},this.$parsers=[],this.$formatters=[],this.$viewChangeListeners=[],this.$untouched=!0,this.$touched=!1,this.$pristine=!0,this.$dirty=!1,this.$valid=!0,this.$invalid=!1,this.$error={},this.$$success={},this.$pending=n,this.$name=f(r.name||"",!1)(e),this.$$parentForm=Ei;var p,d=s(r.ngModel),m=d.assign,g=d,v=m,b=null,x=this;this.$$setOptions=function(e){if((x.$options=e)&&e.getterSetter){var t=s(r.ngModel+"()"),n=s(r.ngModel+"($$$p)");g=function(e){var n=d(e);return E(n)&&(n=t(e)),n},v=function(e,t){E(d(e))?n(e,{$$$p:x.$modelValue}):m(e,x.$modelValue)}}else if(!d.assign)throw co("nonassign",r.ngModel,z(i))},this.$render=h,this.$isEmpty=function(e){return $(e)||""===e||null===e||e!==e};var w=0;Ln({ctrl:this,$element:i,set:function(e,t){e[t]=!0},unset:function(e,t){delete e[t]},$animate:a}),this.$setPristine=function(){x.$dirty=!1,x.$pristine=!0,a.removeClass(i,ao),a.addClass(i,so)},this.$setDirty=function(){x.$dirty=!0,x.$pristine=!1,a.removeClass(i,so),a.addClass(i,ao),x.$$parentForm.$setDirty()},this.$setUntouched=function(){x.$touched=!1,x.$untouched=!0,a.setClass(i,"ng-untouched","ng-touched")},this.$setTouched=function(){x.$touched=!0,x.$untouched=!1,a.setClass(i,"ng-touched","ng-untouched")},this.$rollbackViewValue=function(){u.cancel(b),x.$viewValue=x.$$lastCommittedViewValue,x.$render()},this.$validate=function(){if(!C(x.$modelValue)||!isNaN(x.$modelValue)){var e=x.$$rawModelValue,t=x.$valid,r=x.$modelValue,i=x.$options&&x.$options.allowInvalid;x.$$runValidators(e,x.$$lastCommittedViewValue,function(o){i||t===o||(x.$modelValue=o?e:n,x.$modelValue!==r&&x.$$writeModelToScope())})}},this.$$runValidators=function(e,t,r){function i(){var n=!0;return o(x.$validators,function(r,i){var o=r(e,t);n=n&&o,a(i,o)}),n?!0:(o(x.$asyncValidators,function(e,t){a(t,null)}),!1)}function s(){var r=[],i=!0;o(x.$asyncValidators,function(o,s){var u=o(e,t);if(!u||!E(u.then))throw co("$asyncValidators",u);a(s,n),r.push(u.then(function(){a(s,!0)},function(e){i=!1,a(s,!1)}))}),r.length?l.all(r).then(function(){u(i)},h):u(!0)}function a(e,t){c===w&&x.$setValidity(e,t)}function u(e){c===w&&r(e)}w++;var c=w;(function(){var e=x.$$parserName||"parse";return $(p)?(a(e,null),!0):(p||(o(x.$validators,function(e,t){a(t,null)}),o(x.$asyncValidators,function(e,t){a(t,null)})),a(e,p),p)})()&&i()?s():u(!1)},this.$commitViewValue=function(){var e=x.$viewValue;u.cancel(b),(x.$$lastCommittedViewValue!==e||""===e&&x.$$hasNativeValidators)&&(x.$$lastCommittedViewValue=e,x.$pristine&&this.$setDirty(),this.$$parseAndValidate())},this.$$parseAndValidate=function(){var t=x.$$lastCommittedViewValue;if(p=$(t)?n:!0)for(var r=0;ro;o++){var u=e===n?o:n[o],c=b(e[u],u),u=d(e[u],c);t.push(u),(a[2]||a[1])&&(u=m(r,c),t.push(u)),a[4]&&(c=v(r,c),t.push(c))}return t}),getOptions:function(){for(var e=[],t={},n=$(r)||[],i=s(n),a=i.length,u=0;a>u;u++){var c=n===i?u:i[u],p=b(n[c],c),y=f(r,p),c=d(y,p),x=m(r,p),w=g(r,p),p=v(r,p),y=new o(c,y,x,w,p);e.push(y),t[c]=y}return{items:e,selectValueMap:t,getOptionFromViewValue:function(e){return t[h(e)]},getViewValueFromOption:function(e){return l?Qn.copy(e.viewValue):e.viewValue}}}}}var s=t.createElement("option"),a=t.createElement("optgroup");return{restrict:"A",terminal:!0,require:["select","?ngModel"],link:{pre:function(e,t,n,r){r[0].registerOption=h},post:function(t,n,i,u){function c(e,t){e.element=t,t.disabled=e.disabled,e.label!==t.label&&(t.label=e.label,t.textContent=e.label),e.value!==t.value&&(t.value=e.selectValue)}function l(e,t,n,r){return t&&Un(t.nodeName)===n?n=t:(n=r.cloneNode(!1),t?e.insertBefore(n,t):e.appendChild(n)),n}function f(e){for(var t;e;)t=e.nextSibling,Ne(e),e=t}function p(e){var t=g&&g[0],n=x&&x[0];if(t||n)for(;e&&(e===t||e===n||8===e.nodeType||""===e.value);)e=e.nextSibling;return e}function d(){var e=w&&m.readValue();w=C.getOptions();var t={},r=n[0].firstChild;if(b&&n.prepend(g),r=p(r),w.items.forEach(function(e){var i,o;e.group?(i=t[e.group],i||(i=l(n[0],r,"optgroup",a),r=i.nextSibling,i.label=e.group,i=t[e.group]={groupElement:i,currentOptionElement:i.firstChild}),o=l(i.groupElement,i.currentOptionElement,"option",s),c(e,o),i.currentOptionElement=o.nextSibling):(o=l(n[0],r,"option",s),c(e,o),r=o.nextSibling)}),Object.keys(t).forEach(function(e){f(t[e].currentOptionElement)}),f(r),h.$render(),!h.$isEmpty(e)){var i=m.readValue();(C.trackBy?L(e,i):e===i)||(h.$setViewValue(i),h.$render())}}var h=u[1];if(h){var m=u[0];u=i.multiple;for(var g,v=0,$=n.children(),y=$.length;y>v;v++)if(""===$[v].value){g=$.eq(v);break}var b=!!g,x=In(s.cloneNode(!1));x.val("?");var w,C=r(i.ngOptions,n,t);u?(h.$isEmpty=function(e){return!e||0===e.length},m.writeValue=function(e){w.items.forEach(function(e){e.element.selected=!1}),e&&e.forEach(function(e){(e=w.getOptionFromViewValue(e))&&!e.disabled&&(e.element.selected=!0)})},m.readValue=function(){var e=n.val()||[],t=[];return o(e,function(e){(e=w.selectValueMap[e])&&!e.disabled&&t.push(w.getViewValueFromOption(e))}),t},C.trackBy&&t.$watchCollection(function(){return nr(h.$viewValue)?h.$viewValue.map(function(e){return C.getTrackByValue(e)}):void 0},function(){h.$render()})):(m.writeValue=function(e){var t=w.getOptionFromViewValue(e);t&&!t.disabled?n[0].value!==t.selectValue&&(x.remove(),b||g.remove(),n[0].value=t.selectValue,t.element.selected=!0,t.element.setAttribute("selected","selected")):null===e||b?(x.remove(),b||n.prepend(g),n.val(""),g.prop("selected",!0),g.attr("selected",!0)):(b||g.remove(),n.prepend(x),n.val("?"),x.prop("selected",!0),x.attr("selected",!0))},m.readValue=function(){var e=w.selectValueMap[n.val()];return e&&!e.disabled?(b||g.remove(),x.remove(),w.getViewValueFromOption(e)):null},C.trackBy&&t.$watch(function(){return C.getTrackByValue(h.$viewValue)},function(){h.$render()})),b?(g.remove(),e(g)(t),g.removeClass("ng-scope")):g=In(s.cloneNode(!1)),d(),t.$watchCollection(C.getWatchables,d)}}}}}],yo=["$locale","$interpolate","$log",function(e,t,n){var r=/{}/g,i=/^when(Minus)?(.+)$/;return{link:function(s,a,u){function c(e){a.text(e||"")}var l,f=u.count,p=u.$attr.when&&a.attr(u.$attr.when),d=u.offset||0,m=s.$eval(p)||{},g={},v=t.startSymbol(),y=t.endSymbol(),b=v+f+"-"+d+y,x=Qn.noop;o(u,function(e,t){var n=i.exec(t);n&&(n=(n[1]?"-":"")+Un(n[2]),m[n]=a.attr(u.$attr[t]))}),o(m,function(e,n){g[n]=t(e.replace(r,b))}),s.$watch(f,function(t){var r=parseFloat(t),i=isNaN(r);i||r in m||(r=e.pluralCat(r-d)),r===l||i&&C(l)&&isNaN(l)||(x(),i=g[r],$(i)?(null!=t&&n.debug("ngPluralize: no rule defined for '"+r+"' in "+p),x=h,c()):x=s.$watch(i,c),l=r)})}}}],bo=["$parse","$animate",function(e,s){var a=r("ngRepeat"),u=function(e,t,n,r,i,o,s){e[n]=r,i&&(e[i]=o),e.$index=t,e.$first=0===t,e.$last=t===s-1,e.$middle=!(e.$first||e.$last),e.$odd=!(e.$even=0===(1&t))};return{restrict:"A",multiElement:!0,transclude:"element",priority:1e3,terminal:!0,$$tlb:!0,compile:function(r,c){var l=c.ngRepeat,f=t.createComment(" end ngRepeat: "+l+" "),p=l.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+track\s+by\s+([\s\S]+?))?\s*$/);if(!p)throw a("iexp",l);var d=p[1],h=p[2],m=p[3],g=p[4],p=d.match(/^(?:(\s*[\$\w]+)|\(\s*([\$\w]+)\s*,\s*([\$\w]+)\s*\))$/);if(!p)throw a("iidexp",d);var v=p[3]||p[1],$=p[2];if(m&&(!/^[$a-zA-Z_][$a-zA-Z0-9_]*$/.test(m)||/^(null|undefined|this|\$index|\$first|\$middle|\$last|\$even|\$odd|\$parent|\$root|\$id)$/.test(m)))throw a("badident",m);var y,b,x,w,C={$id:Ve};return g?y=e(g):(x=function(e,t){return Ve(t)},w=function(e){return e}),function(e,t,r,c,p){y&&(b=function(t,n,r){return $&&(C[$]=t),C[v]=n,C.$index=r,y(e,C)});var d=ce();e.$watchCollection(h,function(r){var c,h,g,y,C,S,E,k,T,A,N=t[0],O=ce();if(m&&(e[m]=r),i(r))k=r,h=b||x;else for(A in h=b||w,k=[],r)zn.call(r,A)&&"$"!==A.charAt(0)&&k.push(A);for(y=k.length,A=Array(y),c=0;y>c;c++)if(C=r===k?c:k[c],S=r[C],E=h(C,S,c),d[E])T=d[E],delete d[E],O[E]=T,A[c]=T;else{if(O[E])throw o(A,function(e){e&&e.scope&&(d[e.id]=e)}),a("dupes",l,E,S);A[c]={id:E,scope:n,clone:n},O[E]=!0}for(g in d){if(T=d[g],E=ue(T.clone),s.leave(E),E[0].parentNode)for(c=0,h=E.length;h>c;c++)E[c].$$NG_REMOVED=!0;T.scope.$destroy()}for(c=0;y>c;c++)if(C=r===k?c:k[c],S=r[C],T=A[c],T.scope){g=N;do g=g.nextSibling;while(g&&g.$$NG_REMOVED);T.clone[0]!=g&&s.move(ue(T.clone),null,In(N)),N=T.clone[T.clone.length-1],u(T.scope,c,v,S,$,C,y)}else p(function(e,t){T.scope=t;var n=f.cloneNode(!1);e[e.length++]=n,s.enter(e,null,In(N)),N=n,T.clone=e,O[T.id]=T,u(T.scope,c,v,S,$,C,y)});d=O})}}}}],xo=["$animate",function(e){return{restrict:"A",multiElement:!0,link:function(t,n,r){t.$watch(r.ngShow,function(t){e[t?"removeClass":"addClass"](n,"ng-hide",{tempClasses:"ng-hide-animate"})})}}}],wo=["$animate",function(e){return{restrict:"A",multiElement:!0,link:function(t,n,r){t.$watch(r.ngHide,function(t){e[t?"addClass":"removeClass"](n,"ng-hide",{tempClasses:"ng-hide-animate"})})}}}],Co=An(function(e,t,n){e.$watch(n.ngStyle,function(e,n){n&&e!==n&&o(n,function(e,n){t.css(n,"")}),e&&t.css(e)},!0)}),So=["$animate",function(e){return{require:"ngSwitch",controller:["$scope",function(){this.cases={}}],link:function(n,r,i,s){var a=[],u=[],c=[],l=[],f=function(e,t){return function(){e.splice(t,1)}};n.$watch(i.ngSwitch||i.on,function(n){var r,i;for(r=0,i=c.length;i>r;++r)e.cancel(c[r]);for(r=c.length=0,i=l.length;i>r;++r){var p=ue(u[r].clone);l[r].$destroy(),(c[r]=e.leave(p)).then(f(c,r))}u.length=0,l.length=0,(a=s.cases["!"+n]||s.cases["?"])&&o(a,function(n){n.transclude(function(r,i){l.push(i);var o=n.element;r[r.length++]=t.createComment(" end ngSwitchWhen: "),u.push({clone:r}),e.enter(r,o.parent(),o)})})})}}}],Eo=An({transclude:"element",priority:1200,require:"^ngSwitch",multiElement:!0,link:function(e,t,n,r,i){r.cases["!"+n.ngSwitchWhen]=r.cases["!"+n.ngSwitchWhen]||[],r.cases["!"+n.ngSwitchWhen].push({transclude:i,element:t})}}),ko=An({transclude:"element",priority:1200,require:"^ngSwitch",multiElement:!0,link:function(e,t,n,r,i){r.cases["?"]=r.cases["?"]||[],r.cases["?"].push({transclude:i,element:t})}}),To=An({restrict:"EAC",link:function(e,t,n,i,o){if(!o)throw r("ngTransclude")("orphan",z(t));o(function(e){t.empty(),t.append(e)})}}),Ao=["$templateCache",function(e){return{restrict:"E",terminal:!0,compile:function(t,n){"text/ng-template"==n.type&&e.put(n.id,t[0].text)}}}],No={$setViewValue:h,$render:h},Oo=["$element","$scope","$attrs",function(e,r,i){var o=this,s=new Le;o.ngModelCtrl=No,o.unknownOption=In(t.createElement("option")),o.renderUnknownOption=function(t){t="? "+Ve(t)+" ?",o.unknownOption.val(t),e.prepend(o.unknownOption),e.val(t)},r.$on("$destroy",function(){o.renderUnknownOption=h}),o.removeUnknownOption=function(){o.unknownOption.parent()&&o.unknownOption.remove()},o.readValue=function(){return o.removeUnknownOption(),e.val()},o.writeValue=function(t){o.hasOption(t)?(o.removeUnknownOption(),e.val(t),""===t&&o.emptyOption.prop("selected",!0)):null==t&&o.emptyOption?(o.removeUnknownOption(),e.val("")):o.renderUnknownOption(t)},o.addOption=function(e,t){se(e,'"option value"'),""===e&&(o.emptyOption=t);var n=s.get(e)||0;s.put(e,n+1),o.ngModelCtrl.$render(),t[0].hasAttribute("selected")&&(t[0].selected=!0)},o.removeOption=function(e){var t=s.get(e);t&&(1===t?(s.remove(e),""===e&&(o.emptyOption=n)):s.put(e,t-1))},o.hasOption=function(e){return!!s.get(e)},o.registerOption=function(e,t,n,r,i){if(r){var s;n.$observe("value",function(e){y(s)&&o.removeOption(s),s=e,o.addOption(e,t)})}else i?e.$watch(i,function(e,r){n.$set("value",e),r!==e&&o.removeOption(r),o.addOption(e,t)}):o.addOption(n.value,t);t.on("$destroy",function(){o.removeOption(n.value),o.ngModelCtrl.$render()})}}],Mo=function(){return{restrict:"E",require:["select","?ngModel"],controller:Oo,priority:1,link:{pre:function(e,t,n,r){var i=r[1];if(i){var s=r[0];if(s.ngModelCtrl=i,i.$render=function(){s.writeValue(i.$viewValue)},t.on("change",function(){e.$apply(function(){i.$setViewValue(s.readValue())})}),n.multiple){s.readValue=function(){var e=[];return o(t.find("option"),function(t){t.selected&&e.push(t.value)}),e},s.writeValue=function(e){var n=new Le(e);o(t.find("option"),function(e){e.selected=y(n.get(e.value))})};var a,u=NaN;e.$watch(function(){u!==i.$viewValue||L(a,i.$viewValue)||(a=V(i.$viewValue),i.$render()),u=i.$viewValue}),i.$isEmpty=function(e){return!e||0===e.length}}}}}}},jo=["$interpolate",function(e){return{restrict:"E",priority:100,compile:function(t,n){if(y(n.value))var r=e(n.value,!0);else{var i=e(t.text(),!0);i||n.$set("value",t.text())}return function(e,t,n){var o=t.parent();(o=o.data("$selectController")||o.parent().data("$selectController"))&&o.registerOption(e,t,n,r,i)}}}}],Do=g({restrict:"E",terminal:!1}),Po=function(){return{restrict:"A",require:"?ngModel",link:function(e,t,n,r){r&&(n.required=!0,r.$validators.required=function(e,t){return!n.required||!r.$isEmpty(t)},n.$observe("required",function(){r.$validate()}))}}},qo=function(){return{restrict:"A",require:"?ngModel",link:function(e,t,i,o){if(o){var s,a=i.ngPattern||i.pattern;i.$observe("pattern",function(e){if(w(e)&&0i||r.$isEmpty(t)||t.length<=i}}}}},Lo=function(){return{restrict:"A",require:"?ngModel",link:function(e,t,n,r){if(r){var i=0;n.$observe("minlength",function(e){i=p(e)||0,r.$validate()}),r.$validators.minlength=function(e,t){return r.$isEmpty(t)||t.length>=i}}}}};e.angular.bootstrap?console.log("WARNING: Tried to load angular more than once."):(re(),fe(Qn),Qn.module("ngLocale",[],["$provide",function(e){function t(e){e+="";var t=e.indexOf(".");return-1==t?0:e.length-t-1}e.value("$locale",{DATETIME_FORMATS:{AMPMS:["AM","PM"],DAY:"Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),ERANAMES:["Before Christ","Anno Domini"],ERAS:["BC","AD"],FIRSTDAYOFWEEK:6,MONTH:"January February March April May June July August September October November December".split(" "),SHORTDAY:"Sun Mon Tue Wed Thu Fri Sat".split(" "),SHORTMONTH:"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),WEEKENDRANGE:[5,6],fullDate:"EEEE, MMMM d, y",longDate:"MMMM d, y",medium:"MMM d, y h:mm:ss a",mediumDate:"MMM d, y",mediumTime:"h:mm:ss a","short":"M/d/yy h:mm a",shortDate:"M/d/yy",shortTime:"h:mm a"},NUMBER_FORMATS:{CURRENCY_SYM:"$",DECIMAL_SEP:".",GROUP_SEP:",",PATTERNS:[{gSize:3,lgSize:3,maxFrac:3,minFrac:0,minInt:1,negPre:"-",negSuf:"",posPre:"",posSuf:""},{gSize:3,lgSize:3,maxFrac:2,minFrac:2,minInt:1,negPre:"-¤",negSuf:"",posPre:"¤",posSuf:""}]},id:"en-us",pluralCat:function(e,r){var i=0|e,o=r;return n===o&&(o=Math.min(t(e),3)),Math.pow(10,o),1==i&&0==o?"one":"other"}})}]),In(t).ready(function(){Z(t,Q)}))}(window,document),!window.angular.$$csp().noInlineStyle&&window.angular.element(document.head).prepend('');var app=angular.module("searchApp",[]);app.config(["$interpolateProvider",function(e){return e.startSymbol("{(").endSymbol(")}")}]),app.controller("searchController",["$scope","$http",function(e,t){e.pesquisar=function(n){e.posts=[],""!=n&&void 0!=n&&n.length>=1&&t.get("/search.json",{data:n}).success(function(t){e.posts=t}).error(function(e){console.error("error...")})}}]),!function(e,t){"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){function n(e){var t="length"in e&&e.length,n=Q.type(e);return"function"===n||Q.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e}function r(e,t,n){if(Q.isFunction(t))return Q.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return Q.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(ae.test(t))return Q.filter(t,e,n);t=Q.filter(t,e)}return Q.grep(e,function(e){return W.call(t,e)>=0!==n})}function i(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}function o(e){var t=he[e]={};return Q.each(e.match(de)||[],function(e,n){t[n]=!0}),t}function s(){K.removeEventListener("DOMContentLoaded",s,!1),e.removeEventListener("load",s,!1),Q.ready()}function a(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=Q.expando+a.uid++}function u(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(be,"-$1").toLowerCase(),n=e.getAttribute(r),"string"==typeof n){try{n="true"===n?!0:"false"===n?!1:"null"===n?null:+n+""===n?+n:ye.test(n)?Q.parseJSON(n):n}catch(i){}$e.set(e,t,n)}else n=void 0;return n}function c(){return!0}function l(){return!1}function f(){try{return K.activeElement}catch(e){}}function p(e,t){return Q.nodeName(e,"table")&&Q.nodeName(11!==t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function d(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function h(e){var t=Ve.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function m(e,t){for(var n=0,r=e.length;r>n;n++)ve.set(e[n],"globalEval",!t||ve.get(t[n],"globalEval"))}function g(e,t){var n,r,i,o,s,a,u,c;if(1===t.nodeType){if(ve.hasData(e)&&(o=ve.access(e),s=ve.set(t,o),c=o.events)){delete s.handle,s.events={};for(i in c)for(n=0,r=c[i].length;r>n;n++)Q.event.add(t,i,c[i][n])}$e.hasData(e)&&(a=$e.access(e),u=Q.extend({},a),$e.set(t,u))}}function v(e,t){var n=e.getElementsByTagName?e.getElementsByTagName(t||"*"):e.querySelectorAll?e.querySelectorAll(t||"*"):[];return void 0===t||t&&Q.nodeName(e,t)?Q.merge([e],n):n}function $(e,t){var n=t.nodeName.toLowerCase();"input"===n&&Se.test(e.type)?t.checked=e.checked:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}function y(t,n){var r,i=Q(n.createElement(t)).appendTo(n.body),o=e.getDefaultComputedStyle&&(r=e.getDefaultComputedStyle(i[0]))?r.display:Q.css(i[0],"display");return i.detach(),o}function b(e){var t=K,n=Ie[e];return n||(n=y(e,t),"none"!==n&&n||(Re=(Re||Q("'):i?(o=s.parseUri(e,{autoplay:c.settings.autoplayVideos?"1":"0",byline:"0",portrait:"0",color:c.settings.vimeoColor}),t=''):t='','
'+t+"
"},loadMedia:function(e,t){if(0===e.trim().indexOf("#"))t.call(n("
",{"class":"swipebox-inline-container"}).append(n(e).clone().toggleClass(c.settings.toggleClassOnLoad)));else if(!this.isVideo(e)){var r=n("").on("load",function(){t.call(r)});r.attr("src",e)}},getNext:function(){var e,t=this,r=n("#swipebox-slider .slide").index(n("#swipebox-slider .slide.current"));r+10?(e=n("#swipebox-slider .slide").eq(t).contents().find("iframe").attr("src"),n("#swipebox-slider .slide").eq(t).contents().find("iframe").attr("src",e),t--,this.setSlide(t),this.preloadMedia(t-1),c.settings.prevSlide&&c.settings.prevSlide()):(n("#swipebox-overlay").addClass("leftSpring"),setTimeout(function(){n("#swipebox-overlay").removeClass("leftSpring")},500))},nextSlide:function(){},prevSlide:function(){},closeSlide:function(){n("html").removeClass("swipebox-html"),n("html").removeClass("swipebox-touch"),n(e).trigger("resize"),this.destroy()},destroy:function(){n(e).unbind("keyup"),n("body").unbind("touchstart"),n("body").unbind("touchmove"),n("body").unbind("touchend"),n("#swipebox-slider").unbind(),n("#swipebox-overlay").remove(),n.isArray(i)||i.removeData("_swipebox"),this.target&&this.target.trigger("swipebox-destroy"),n.swipebox.isOpen=!1,c.settings.afterClose&&c.settings.afterClose()}},c.init()},n.fn.swipebox=function(e){if(!n.data(this,"_swipebox")){var t=new n.swipebox(this,e);this.data("_swipebox",t)}return this.data("_swipebox")}}(window,document,jQuery),!function(e){var t=function(t){var n=this;t=t||{},"string"==typeof t&&(t={elements:t}),this.sel=null,this.textSelection="",this.htmlSelection="",this.appId=e('meta[property="fb:app_id"]').attr("content")||e('meta[property="fb:app_id"]').attr("value"),this.url2share=e('meta[property="og:url"]').attr("content")||e('meta[property="og:url"]').attr("value")||window.location.href,this.getSelectionText=function(e){var t="",r="",e=e||window.getSelection();if(e.rangeCount){for(var i=document.createElement("div"),o=0,s=e.rangeCount;s>o;++o)i.appendChild(e.getRangeAt(o).cloneContents());r=i.textContent,t=i.innerHTML}return n.textSelection=r,n.htmlSelection=t||r,r},this.selectionDirection=function(e){var t=e||window.getSelection(),n=document.createRange();if(!t.anchorNode)return 0;n.setStart(t.anchorNode,t.anchorOffset),n.setEnd(t.focusNode,t.focusOffset);var r=n.collapsed?"backward":"forward";return n.detach(),r},this.showPopunder=function(){n.popunder=n.popunder||document.getElementById("selectionSharerPopunder");var e=window.getSelection(),t=n.getSelectionText(e);if(e.isCollapsed||t.length<10||!t.match(/ /))return n.hidePopunder();if(n.popunder.classList.contains("fixed"))return n.popunder.style.bottom=0;var r=e.getRangeAt(0),i=r.endContainer.parentNode;if(n.popunder.classList.contains("show")){if(Math.ceil(n.popunder.getBoundingClientRect().top)==Math.ceil(i.getBoundingClientRect().bottom))return;return n.hidePopunder(n.showPopunder)}if(i.nextElementSibling)n.pushSiblings(i);else{n.placeholder||(n.placeholder=document.createElement("div"),n.placeholder.className="selectionSharerPlaceholder");var o=window.getComputedStyle(i).marginBottom;n.placeholder.style.height=o,n.placeholder.style.marginBottom=-2*parseInt(o,10)+"px",i.parentNode.insertBefore(n.placeholder)}var s=window.pageYOffset+i.getBoundingClientRect().bottom;n.popunder.style.top=Math.ceil(s)+"px",setTimeout(function(){n.placeholder&&n.placeholder.classList.add("show"),n.popunder.classList.add("show")},0)},this.pushSiblings=function(e){for(;e=e.nextElementSibling;)e.classList.add("selectionSharer"),e.classList.add("moveDown")},this.hidePopunder=function(e){if(e=e||function(){},"fixed"==n.popunder)return n.popunder.style.bottom="-50px",e();n.popunder.classList.remove("show"),n.placeholder&&n.placeholder.classList.remove("show");for(var t=document.getElementsByClassName("moveDown");el=t[0];)el.classList.remove("moveDown");setTimeout(function(){n.placeholder&&document.body.insertBefore(n.placeholder),e()},600)},this.show=function(e){setTimeout(function(){var t=window.getSelection(),r=n.getSelectionText(t);if(!t.isCollapsed&&r&&r.length>10&&r.match(/ /)){var i=t.getRangeAt(0),o=i.getBoundingClientRect().top-5,s=o+window.scrollY-n.$popover.height(),a=0;if(e)a=e.pageX;else{var u=t.anchorNode.parentNode;a+=u.offsetWidth/2;do a+=u.offsetLeft;while(u=u.offsetParent)}switch(n.selectionDirection(t)){case"forward":a-=n.$popover.width();break;case"backward":a+=n.$popover.width();break;default:return}n.$popover.removeClass("anim").css("top",s+10).css("left",a).show(),setTimeout(function(){n.$popover.addClass("anim").css("top",s)},0)}},10)},this.hide=function(e){n.$popover.hide()},this.smart_truncate=function(e,t){if(!e||!e.length)return e;var n=e.length>t,r=n?e.substr(0,t-1):e;return r=n?r.substr(0,r.lastIndexOf(" ")):r,n?r+"...":r},this.getRelatedTwitterAccounts=function(){var t=[],n=e('meta[name="twitter:creator"]').attr("content")||e('meta[name="twitter:creator"]').attr("value");n&&t.push(n);for(var r=document.getElementsByTagName("a"),i=0,o=r.length;o>i;i++)if(r[i].attributes.href&&"string"==typeof r[i].attributes.href.value){var s=r[i].attributes.href.value.match(/^https?:\/\/twitter\.com\/([a-z0-9_]{1,20})/i);s&&s.length>1&&-1==["widgets","intent"].indexOf(s[1])&&t.push(s[1])}return t.length>0?t.join(","):""},this.shareTwitter=function(e){e.preventDefault();var t="“"+n.smart_truncate(n.textSelection.trim(),114)+"”",r="http://twitter.com/intent/tweet?text="+encodeURIComponent(t)+"&related="+n.relatedTwitterAccounts+"&url="+encodeURIComponent(window.location.href);n.viaTwitterAccount&&t.length<114-n.viaTwitterAccount.length&&(r+="&via="+n.viaTwitterAccount);var i=640,o=440,s=screen.width/2-i/2,a=screen.height/2-o/2-100;return window.open(r,"share_twitter","toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=no, copyhistory=no, width="+i+", height="+o+", top="+a+", left="+s),n.hide(),!1},this.shareFacebook=function(e){e.preventDefault();var t=n.htmlSelection.replace(/]*>/gi,"\n").replace(/<\/p>| /gi,"").trim(),r="https://www.facebook.com/dialog/feed?app_id="+n.appId+"&display=popup&caption="+encodeURIComponent(t)+"&link="+encodeURIComponent(n.url2share)+"&href="+encodeURIComponent(n.url2share)+"&redirect_uri="+encodeURIComponent(n.url2share),i=640,o=440,s=screen.width/2-i/2,a=screen.height/2-o/2-100;window.open(r,"share_facebook","toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=no, copyhistory=no, width="+i+", height="+o+", top="+a+", left="+s)},this.shareEmail=function(t){var r=n.htmlSelection.replace(/]*>/gi,"\n").replace(/<\/p>| /gi,"").trim(),i={};return i.subject=encodeURIComponent("Quote from "+document.title),i.body=encodeURIComponent("“"+r+"”")+"%0D%0A%0D%0AFrom: "+document.title+"%0D%0A"+window.location.href,e(this).attr("href","mailto:?subject="+i.subject+"&body="+i.body),n.hide(),!0},this.render=function(){var t='',r='
';n.$popover=e(t),n.$popover.find("a.tweet").click(n.shareTwitter),n.$popover.find("a.facebook").click(n.shareFacebook),n.$popover.find("a.email").click(n.shareEmail),e("body").append(n.$popover),n.$popunder=e(r),n.$popunder.find("a.tweet").click(n.shareTwitter),n.$popunder.find("a.facebook").click(n.shareFacebook),n.$popunder.find("a.email").click(n.shareEmail),e("body").append(n.$popunder),n.appId&&n.url2share&&e(".selectionSharer a.facebook").css("display","inline-block")},this.setElements=function(t){"string"==typeof t&&(t=e(t)),n.$elements=t instanceof e?t:e(t),n.$elements.mouseup(n.show).mousedown(n.hide).addClass("selectionShareable"),n.$elements.bind("touchstart",function(e){n.isMobile=!0}),document.onselectionchange=n.selectionChanged},this.selectionChanged=function(e){n.isMobile&&(n.lastSelectionChanged&&clearTimeout(n.lastSelectionChanged),n.lastSelectionChanged=setTimeout(function(){n.showPopunder(e)},300))},this.render(),t.elements&&this.setElements(t.elements)};e.fn.selectionSharer=function(){var e=new t;return e.setElements(this),this},"function"==typeof define?define(function(){return t.load=function(e,n,r,i){var o=new t;o.setElements("p"),r()},t}):window.SelectionSharer=t}(jQuery),function(e){"use strict";function t(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);return e}function n(e,n){this.el=e,this.options=t({},this.options),t(this.options,n),this.ctrlClose=this.el.querySelector("[data-modal-close]"),this.isOpen=!1,this._initEvents()}var r={animations:Modernizr.cssanimations},i={WebkitAnimation:"webkitAnimationEnd",OAnimation:"oAnimationEnd",msAnimation:"MSAnimationEnd",animation:"animationend"},o=i[Modernizr.prefixed("animation")],s=function(e,t){var n=function(e){if(r.animations){if(e.target!=this)return;this.removeEventListener(o,n)}t&&"function"==typeof t&&t.call()};r.animations?e.addEventListener(o,n):n()};n.prototype.options={onOpenModal:function(){return!1},onCloseModal:function(){return!1}},n.prototype._initEvents=function(){var e=this;this.ctrlClose.addEventListener("click",this.toggle.bind(this)),document.addEventListener("keydown",function(t){var n=t.keyCode||t.which;27===n&&e.isOpen&&e.toggle()}),this.el.querySelector(".modal-search__overlay").addEventListener("click",this.toggle.bind(this))},n.prototype.toggle=function(){var e=this;this.isOpen?(classie.remove(document.body,"modal-search--open"),classie.remove(this.el,"modal-search--open"),classie.add(e.el,"modal-search--close"),s(this.el.querySelector(".modal-search__content"),function(){classie.remove(e.el,"modal-search--close")}),this.options.onCloseModal(this)):(classie.add(document.body,"modal-search--open"),classie.add(this.el,"modal-search--open"),this.options.onOpenModal(this)),this.isOpen=!this.isOpen},e.ModalFx=n}(window);var ModalFx=ModalFx||[];!function(){var e=document.querySelector("[data-modal-search]"),t=document.getElementById(e.getAttribute("data-modal-search")),n=new ModalFx(t);e.addEventListener("click",n.toggle.bind(n))}(),function(e){"use strict";var t=e("#contactForm");e(document).ready(function(){e(".show-disqus").on("click",function(t){t.preventDefault();var n=e(".disqus-hidden");e.ajax({type:"GET",url:"http://"+disqus_shortname+".disqus.com/embed.js",dataType:"script",cache:!0,beforeSend:function(){n.html("Carregando..")}}).done(function(){n.delay(1200).fadeOut().delay(500).html("")})}),e("p").selectionSharer(),e(".swipebox").swipebox(),t.on("click","#sendForm",function(n){n.preventDefault();var r=e(this),i=t.attr("action"),o=t.attr("method"),s=t.serialize(),a=t.find(".alert"),u="",c="",l=t.find("#name"),f=t.find("#email"),p=t.find("#message"),d=l.val(),h=f.val(),m=p.val();a.html("").removeClass("alert-error alert-success fadeIn tada animated hinge").hide(),r.prop("disabled",!0),""!==d&&void 0!==d&&""!==h&&void 0!==h&&""!==m&&void 0!==m?e.ajax({ +url:i,method:o,data:s,dataType:"json"}).success(function(e){t.each(function(){this.reset()}),e.success?(c="alert-success fadeIn hinge",u="

Formulário enviado com sucesso.

"):(c="alert-error tada animated hinge",u="

Ocorreu um erro no envio do formulário, tente enviar novamente para: zhewe.me@gmail.com

"),a.html(u).addClass(c).fadeIn("600"),r.prop("disabled",!1)}).error(function(e){console.error(e)}):(void 0===d||""===d?l.addClass("error"):l.removeClass("error"),void 0===h||""===h?f.addClass("error"):f.removeClass("error"),void 0===m||""===m?p.addClass("error"):p.removeClass("error"),c="alert-error tada animated hinge",u="

Preencha corretamente o formulário.

",a.html(u).addClass(c).fadeIn("600"),r.prop("disabled",!1))})})}(jQuery); \ No newline at end of file diff --git a/assets/js/modernizr-custom.js b/assets/js/modernizr-custom.js new file mode 100755 index 00000000..aea7d47a --- /dev/null +++ b/assets/js/modernizr-custom.js @@ -0,0 +1,3 @@ +/*! modernizr 3.2.0 (Custom Build) | MIT * + * http://modernizr.com/download/?-cssanimations-cssfilters-cssremunit-csstransforms-csstransforms3d-csstransitions-displaytable-mediaqueries-opacity-preserve3d-prefixed-prefixedcss-prefixedcssvalue-setclasses !*/ +!function(e,t,n){function r(e,t){return typeof e===t}function s(){var e,t,n,s,i,o,a;for(var f in S)if(S.hasOwnProperty(f)){if(e=[],t=S[f],t.name&&(e.push(t.name.toLowerCase()),t.options&&t.options.aliases&&t.options.aliases.length))for(n=0;np;p++)if(v=e[p],y=q.style[v],l(v,"-")&&(v=o(v)),q.style[v]!==n){if(i||r(s,"undefined"))return a(),"pfx"==t?v:!0;try{q.style[v]=s}catch(g){}if(q.style[v]!=y)return a(),"pfx"==t?v:!0}return a(),!1}function y(e,t,n,s,i){var o=e.charAt(0).toUpperCase()+e.slice(1),a=(e+" "+N.join(o+" ")+o).split(" ");return r(t,"string")||r(t,"undefined")?v(a,t,s,i):(a=(e+" "+P.join(o+" ")+o).split(" "),d(a,t,n))}function h(e,t,r){return y(e,n,n,t,r)}var g=[],S=[],C={_version:"3.2.0",_config:{classPrefix:"",enableClasses:!0,enableJSClass:!0,usePrefixes:!0},_q:[],on:function(e,t){var n=this;setTimeout(function(){t(n[e])},0)},addTest:function(e,t,n){S.push({name:e,fn:t,options:n})},addAsyncTest:function(e){S.push({name:null,fn:e})}},Modernizr=function(){};Modernizr.prototype=C,Modernizr=new Modernizr;var x=t.documentElement,w="svg"===x.nodeName.toLowerCase();Modernizr.addTest("cssremunit",function(){var e=f("a").style;try{e.fontSize="3rem"}catch(t){}return/rem/.test(e.fontSize)});var b=C._config.usePrefixes?" -webkit- -moz- -o- -ms- ".split(" "):[];C._prefixes=b,Modernizr.addTest("opacity",function(){var e=f("a").style;return e.cssText=b.join("opacity:.55;"),/^0.55$/.test(e.opacity)});var _="CSS"in e&&"supports"in e.CSS,T="supportsCSS"in e;Modernizr.addTest("supports",_||T);var z="Moz O ms Webkit",P=C._config.usePrefixes?z.toLowerCase().split(" "):[];C._domPrefixes=P;var E=function(e,t){var n=!1,r=f("div"),s=r.style;if(e in s){var i=P.length;for(s[e]=t,n=s[e];i--&&!n;)s[e]="-"+P[i]+"-"+t,n=s[e]}return""===n&&(n=!1),n};C.prefixedCSSValue=E;var N=C._config.usePrefixes?z.split(" "):[];C._cssomPrefixes=N;var j=function(t){var r,s=b.length,i=e.CSSRule;if("undefined"==typeof i)return n;if(!t)return!1;if(t=t.replace(/^@/,""),r=t.replace(/-/g,"_").toUpperCase()+"_RULE",r in i)return"@"+t;for(var o=0;s>o;o++){var a=b[o],f=a.toUpperCase()+"_"+r;if(f in i)return"@-"+a.toLowerCase()+"-"+t}return!1};C.atRule=j;var k=C.testStyles=c;k("#modernizr{display: table; direction: ltr}#modernizr div{display: table-cell; padding: 10px}",function(e){var t,n=e.childNodes;t=n[0].offsetLeft9)}),Modernizr.addTest("csstransforms",function(){return-1===navigator.userAgent.indexOf("Android 2.")&&h("transform","scale(1)",!0)}),Modernizr.addTest("csstransforms3d",function(){var e=!!h("perspective","1px",!0),t=Modernizr._config.usePrefixes;if(e&&(!t||"webkitPerspective"in x.style)){var n,r="#modernizr{width:0;height:0}";Modernizr.supports?n="@supports (perspective: 1px)":(n="@media (transform-3d)",t&&(n+=",(-webkit-transform-3d)")),n+="{#modernizr{width:7px;height:18px;margin:0;padding:0;border:0}}",k(r+n,function(t){e=7===t.offsetWidth&&18===t.offsetHeight})}return e}),Modernizr.addTest("preserve3d",h("transformStyle","preserve-3d")),Modernizr.addTest("csstransitions",h("transition","all",!0)),s(),i(g),delete C.addTest,delete C.addAsyncTest;for(var O=0;O + + + + + + + + 3D Space Invader • Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+
+
+

3D Space Invader

+ +
+
+
+

I reproduced the classic game Space Invaders, which is considered one of the most influential video games of all time. This game helped expand the video game industry from a novelty to a global industry, and ushered in the golden age of arcade video games.

+
+

Description

+

This project was to reproduce the classic game Space Invaders with OpenGL. In addition to basic components (the field, players’ cannons, cannon shooting), this project also included some additional effects, such as monster explosion effects, the periodical appearance of UFO at the top and multiple lives.

+ + +
+

/end

+
+
+
+
+ + + + + \ No newline at end of file diff --git a/blog/automated-program-repair-in-expertiza.html b/blog/automated-program-repair-in-expertiza.html new file mode 100644 index 00000000..62174210 --- /dev/null +++ b/blog/automated-program-repair-in-expertiza.html @@ -0,0 +1,176 @@ + + + + + + + + + Automated Program Repair in Expertiza • Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+
+
+

Automated Program Repair in Expertiza

+ +
+
+
+

Bug fixing is a time-consuming work. Recently, automated program repair receives more and more attentions. There are many existing tools which can fix Java, C and Python programs. To the best of my knowledge, no tool repairs on Ruby language, especially Ruby on Rails web application program.

+
+

Description

+

I created an automated program repair tool named Mutator. It can fix Ruby on Rails runtime exception errors successfully. Mutator uses fix patterns offered by Mutant ruby gem to exhaustively produce patch candidates. For the experiment, I selected 17 real runtime exception errors and manually created developer patches and corresponding test cases. Mutator successfully fixed one runtime exception error with 20 solutions for 24 minutes each.

+

Overall, I made following contributions:
+1. Benchmark: Manually created developer patches and corresponding test cases of selected Expertiza runtime exception errors.
+2. Mutator: An automated program repair tool leveraging fix patterns. Mutator repairs on Ruby on Rails program. And it exhaustively generates patch candidates based on fix patterns.
+3. Empirical evaluation: Presented the empirical evaluation results by applying Mutator to 17 Expertiza runtime exception errors and analyzed the results for future research of automated program repair.

+ + +

/end

+
+
+
+
+ + + + + \ No newline at end of file diff --git a/blog/books-i-finished-in-2021.html b/blog/books-i-finished-in-2021.html new file mode 100644 index 00000000..ae047c67 --- /dev/null +++ b/blog/books-i-finished-in-2021.html @@ -0,0 +1,172 @@ + + + + + + + + + Books I Finished In 2021 • Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+
+
+

Books I Finished In 2021

+ +
+
+
+

The book I finished in 2021 with one-sentence notes.

+
+
+

Educated: A Memoir

+

Educated: A Memoir

+
    +
  • Education can change your life.
  • +
+
+

/end

+
+
+
+
+ + + + + \ No newline at end of file diff --git a/blog/books-i-finished-in-2022.html b/blog/books-i-finished-in-2022.html new file mode 100644 index 00000000..755ab521 --- /dev/null +++ b/blog/books-i-finished-in-2022.html @@ -0,0 +1,432 @@ + + + + + + + + + Books I Finished In 2022 • Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+
+
+

Books I Finished In 2022

+ +
+
+
+

The book I finished in 2022 with notes.

+
+
+

Maybe You Should Talk To Someone: A Therapist, HER Therapist, and Our Lives Revealed

+

Maybe You Should Talk To Someone: A Therapist, HER Therapist, and Our Lives Revealed

+
    +
  • A therapists also needs to see another therapist just like us.
  • +
+
+

The Space Race

+

The Space Race

+
    +
  • Many astronauts have walked on the moon after Neil Armstrong.
  • +
  • The International Space Station will be retired in 2030.
  • +
  • The private spaceflight companies are playing more and more important roles.
  • +
+
+

Super Mario: How Nintendo Conquered America

+

Super Mario: How Nintendo Conquered America

+
    +
  • Mar. 10
  • +
  • Mario and Luigi
  • +
+
+

Why We Sleep: Unlocking the Power of Sleep and Dreams

+

Why We Sleep: Unlocking the Power of Sleep and Dreams

+
    +
  • Sleep is very important.
  • +
  • You need 7-9 hours of sleep per day.
  • +
+
+

Hunt, Gather, Parent: What Ancient Cultures Can Teach Us About the Lost Art of Raising Happy, Helpful Little Humans

+

Hunt, Gather, Parent: What Ancient Cultures Can Teach Us About the Lost Art of Raising Happy, Helpful Little Humans

+
    +
  • Avoid instruct your kids too much, let them to explore the world.
  • +
+
+

Busy Toddler's Guide to Actual Parenting: From Their First 'No' to Their First Day of School (and Everything in Between)

+

Busy Toddler’s Guide to Actual Parenting: From Their First ‘No’ to Their First Day of School (and Everything in Between)

+
    +
  • Sensory bin may be a good tool for your kids.
  • +
+
+

How to Raise an Adult: Break Free of the Overparenting Trap and Prepare Your Kid for Success

+

How to Raise an Adult: Break Free of the Overparenting Trap and Prepare Your Kid for Success

+
    +
  • Avoid helicopter parenting
  • +
  • Ask your kids to do some chores
  • +
+
+

The Smartest Kids in the World: And How They Got That Way

+

The Smartest Kids in the World: And How They Got That Way

+
    +
  • Sisu
  • +
  • PISA exam
  • +
+
+

Grit: The Power of Passion and Perseverance

+

Grit: The Power of Passion and Perseverance

+

Grit formula:

+
    +
  • Talent x effort = skill
  • +
  • Skill x effort = achievement
  • +
+
+

No Rules Rules: Netflix and the Culture of Reinvention

+

No Rules Rules: Netflix and the Culture of Reinvention

+
    +
  • [The pratfall effect] For leaders who demonstrate their competencies, whisper wins and shout mistakes.
  • +
  • 5A feedback guidelines: +
      +
    1. Aim to assist
    2. +
    3. Actionable
    4. +
    5. Appreciate
    6. +
    7. Accept or discard
    8. +
    9. Adapt
    10. +
    +
  • +
+
+

The Whole-Brain Child: 12 Revolutionary Strategies to Nurture Your Child's Developing Mind

+

The Whole-Brain Child: 12 Revolutionary Strategies to Nurture Your Child’s Developing Mind

+

Strategies I think are helpful:

+
    +
  1. Connect and re-direct
  2. +
  3. Move it or lose it
  4. +
  5. Feelings come and go
  6. +
  7. Enjoy each other
  8. +
  9. Connect through conflict
  10. +
  11. Use it or lose it
  12. +
+
+

Guns, Germs and Steel: The Fate of Human Societies

+

Guns, Germs and Steel: The Fate of Human Societies

+
    +
  • The longest book I have ever listened.
  • +
  • One fun fact: plants usually make their fruit delicious but make seeds bitter. It makes animals more likely to eat fruits while not crushing their seeds. So the seeds could be spread in various areas by different animals.
  • +
+
+

The Hard Thing About Hard Things: Building a Business When There Are No Easy Answers

+

The Hard Thing About Hard Things: Building a Business When There Are No Easy Answers

+
    +
  • This book talks about how to become an excellent CEO including tips like how to recruit executives that fits the company under the current scale.
  • +
  • However, there are still some tips that are helpful to me as an individual contributor: +
      +
    1. When you are a part of a family, you cannot always think about yourself first. Stop being a boy, become a man.
    2. +
    3. The company takes care of the people, the products, and the profits—in that order.
    4. +
    5. Training is a good investment for your new hires. You will not waste the training time. By contrast, good training can increase employee productivity significantly.
    6. +
    7. People judge you for what you did instead of how you feel. Both hero and coward will feel afraid, but the hero can fight the feelings off and make things done.
    8. +
    +
  • +
+
+

Bringing Up Bébé: One American Mother Discovers the Wisdom of French Parenting

+

Bringing Up Bébé: One American Mother Discovers the Wisdom of French Parenting

+

Several learnings and thoughts:

+
    +
  1. The book mentioned that the French children, even 2-3 months old, could have 4 meals at the same time as adults (breakfast: 8 am, lunch: noon, goûter: 4 pm, and dinner: 8 pm) and could sleep the whole night. I find it difficult for my almost 2-month-old daughter to follow these eating and sleeping mechanisms. But I am trying to let her sleep longer (4-6 hours) during the night.
  2. +
  3. It’s important to let kids wait and delay to satisfy their requirements.
  4. +
  5. Even for babies who cannot speak, they can understand most things.
  6. +
  7. It’s crucial to have adult time and separate from your children, which is beneficial for both you and your kids.
  8. +
  9. In order for parents to have authority, you should say yes to most of the things and only say no for several things that you do not want your kids to do.
  10. +
  11. Autonomy is one of the child’s most basic needs.
  12. +
+
+

The Manager's Path: A Guide for Tech Leaders Navigating Growth and Change

+

The Manager’s Path: A Guide for Tech Leaders Navigating Growth and Change

+
    +
  • This book talks about tips and suggestions about how to be a good mentor, tech lead, manager, senior manager, director, and executive.
  • +
  • I finished the chapters involving the mentor, tech lead, and manager.
  • +
  • Hopefully, I could have a chance to read the rest chapters.
  • +
  • What I was inspired from five out of ten chapters: +
      +
    • As an individual contributor: +
        +
      1. It is crucial to talk about your recent life a little bit in the one-on-one meetings with your manager, so your manager will have context about the reasons behind your energy level changes.
      2. +
      3. Good one-on-one meetings does not only include status updates (which may be better to written in emails or chats). Try to bring in some topics to meetings.
      4. +
      5. Your manager expects you to bring solutions not problems. When you have a problem, instead of demanding that your manager solves it for you, try to ask for advice about how s/he might approach the problem.
      6. +
      7. You may be an introvert and/or not find socializing easy, but the conscious effort and practice in getting to know new people and helping them succeed will pay off.
      8. +
      +
    • +
    • As a manager: +
        +
      1. Listening is the first and the basic skill of managing people.
      2. +
      3. Delivering feedback to your team members quickly (immediately after a meeting if possible) is more valuable than waiting for a convenient time to say something.
      4. +
      5. You can switch tracks (management track and technical track) if you want.
      6. +
      7. Your technical skills is an important criteria to become a successful engineering manager. Try to implement small features and bug fixes, which could help you to stay close enough to the code base, and identify and experience the bottleneck and process problems.
      8. +
      9. Doubling rule of software estimation: whenever asked for an estimate, take your guess and double it.
      10. +
      +
    • +
    +
  • +
+
+

Think Again: The Power of Knowing What You Don't Know

+

Think Again: The Power of Knowing What You Don’t Know

+
    +
  • As we think and talk, we often slip into the mindsets of three different professions: preachers, prosecutors, and politicians. +
      +
    • Preacher mode: when our sacred beliefs are in jeopardy, we deliver sermons to protect and promote our ideals.
    • +
    • Prosecutor mode: when we recognize flaws in other people’s reasoning, we marshal arguments to prove them wrong and win our case. I often act as a prosecutor during the arguments.
    • +
    • Politician mode: when we’re seeking to win over an audience, we campaign and lobby for the approval of our constituents.
    • +
    +
  • +
  • If knowledge is power, knowing what we don’t know is wisdom.
  • +
  • The sweet spot of confidence (neither overconfident nor underconfident) +
      +
    • You can be confident in your ability to achieve the goal in the future while maintaining the humility to question whether you have the right tools in the present.
    • +
    +
  • +
  • Action items that inspire me +
      +
    • Seek out information that goes against your views
    • +
    • Embrace the joy being wrong
    • +
    • Learn something new from each person you meet
    • +
    • Build a challenge network (my wife in my case), not just a support network
    • +
    • Don’t shy away from constructive conflicts
    • +
    • Practice the art of persuasive listening
    • +
    • Less is often more +
        +
      • If you have too many arguments, you will dilute the power of each and everyone. They are going to be less well-explained.
      • +
      +
    • +
    • Invite kids to do multiple drafts and seek feedback from others
    • +
    • Stop asking kids what they want to be when they grow up +
        +
      • Kids don’t have to define themselves in terms of career.
      • +
      • A single identity can close the door of alternatives.
      • +
      • Instead of narrow their opportunities, help them broad their possibilities.
      • +
      +
    • +
    +
  • +
  • I also learned lots of psychology, sociology and other terms. +
      +
    • Anton syndrome
    • +
    • Armchair quarterback syndrome +
        +
      • The opposite of impostor syndrome.
      • +
      +
    • +
    • First-instinct fallacy +
        +
      • It happened a lot when I answered the multiple-choice questions on exams. Many times I stuck to my instinct and got the wrong answer.
      • +
      +
    • +
    • Totalitarian ego +
        +
      • The mental gate-keeper that keeps threatening information out of our heads.
      • +
      +
    • +
    • Group polarization
    • +
    • Overview effect
    • +
    • Inverse charisma +
        +
      • Magnetic quality of a great listener
      • +
      +
    • +
    • Binary bias +
        +
      • A basic human tendency to seek clarity and closure by simplifying a complex continuum into two categories.
      • +
      +
    • +
    • Psychological safety +
        +
      • Forstering a climate with respect, trust, and openness in which people can raise concerns and suggestions without fear of reprisal.
      • +
      • Not a matter of relaxing standards, making people feel comfortable, being nice and aggreeable, or giving unconditional praise.
      • +
      +
    • +
    • Escalation of commitment +
        +
      • Grit (passion and perseverance) might prevent us from rethinking.
      • +
      • There’s a fine line between heroic persistence and foolish stubbornness. Sometimes the best kind of grit is gritting our teeth and turning around.
      • +
      +
    • +
    • Counterfacutal thinking +
        +
      • I am conducting conterfacutal thinking a lot, what if …
      • +
      • As I learned from the Computational Applied Logic course, if the IF statement is true, you can append anything statements after it. I always do this trick with my wife.
      • +
      +
    • +
    +
  • +
  • Ship of Theseus
  • +
  • Planck’s principle
  • +
+
+

Fierce Conversations: Achieving Success at Work & in Life, One Conversation at a Time

+

Fierce Conversations: Achieving Success at Work & in Life, One Conversation at a Time

+
    +
  • Two people in a conversation amount of four people talking. The four are what one person says, what s/he really wanted to say, what her/his listener heard, and what s/he thought her/his lisnener heard.
  • +
  • If you really want to resolve the issue, go directly to the source and confront the person’s behavior one to one in private.
  • +
  • After receiving the feedback, as a leader, you have one chance to get this right. If you push back or get defensive, chances are you may never get feedback again. Your job is to remain curious and grateful for whatever you get in order to pave the way for more meaningful feedback once the trust has been built.
  • +
  • As a leader, part of your job is to consistently let people know what they are doing well to reinforce those positive behaviors into build emotional capital.
  • +
  • There are 7 components to an opening statement: +
      +
    1. Name the issue
    2. +
    3. Select the specific example that illustrates the bahavior or situation that you want to change
    4. +
    5. Describe your emotions about this issue
    6. +
    7. Clarify what is at the stake
    8. +
    9. Identify your contribution to this problem
    10. +
    11. Indicate your wish to resolve the issue
    12. +
    13. Invite your partner to respond
    14. +
    +
  • +
  • Don’t just tell people that you love them. Tell them why you love them, and what it is about them that you love specifically.
  • +
  • Fierce conversations require slience.
  • +
  • If you want your children to talk to you, make slience your primary skill. The author used to interrogate her daughters lovingly each day on the way home from school: what did you do at school today? did you have fun? what did you learn? Such questions rarely elicit the responses that we hoped for. Gradually, the author learned the more she allowed slience following her questions, the more her daughters would be willingly to fill with the works like: guess what my teacher said, or want to hear something really weird. When her daughters spoke, the author entice them to continue by simply saying “Uh-huh”, “Wow”, “I see”, “Really” or even “No way” or simply nod and smile.
  • +
+

/end

+
+
+
+
+ + + + + \ No newline at end of file diff --git a/blog/books-i-finished-in-2023.html b/blog/books-i-finished-in-2023.html new file mode 100644 index 00000000..7df319e8 --- /dev/null +++ b/blog/books-i-finished-in-2023.html @@ -0,0 +1,264 @@ + + + + + + + + + Books I Finished In 2023 • Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+
+
+

Books I Finished In 2023

+ +
+
+
+

The book I finished in 2023 with notes.

+
+
+

The Simple Path to Wealth: Your Road Map to Financial Independence and a Rich, Free Life

+

The Simple Path to Wealth: Your Road Map to Financial Independence and a Rich, Free Life

+
    +
  • The market always goes up.
  • +
  • Investment portfolio: +
      +
    • Stocks (VTSAX) + bonds (VBTLX) + cash, or
    • +
    • Target Retirement Fund (TRF): fund of funds
    • +
    +
  • +
+
+

My Life in Full: Work, Family, and Our Future

+

My Life in Full: Work, Family, and Our Future

+
    +
  • “If I feel that I can help make something better, then I cannot stop myself from jumping in. I have deep sense of duty and find it very hard to say no.” I always have the same feelings.
  • +
  • The And-But phenomenon. When writing evaluation for a man, people tend to write “XXX, and [details about this man’s terrific future]”. When writing reviews for a woman, people tend to write “XXX, but [details about some issue or personality problem]”.
  • +
+
+

The 7 Habits of Highly Effective People: Powerful Lessons in Personal Change

+

The 7 Habits of Highly Effective People: Powerful Lessons in Personal Change

+
    +
  • The way we see things is the source of the way we think and the way we act. The way we see things is often a product of the things we seek or our deeper motivations.
  • +
  • A “paradigm shift” experience: +
      +
    • Two battleships assigned to the training squadron had been at sea on maneuvers in heavy weather for several days. I was serving on the lead battleship and was on watch on the bridge as night fell. The visibility was poor with patchy fog, so the captain remained on the bridge keeping an eye on all activities. Shortly after dark, the lookout on the wing of the bridge reported, “Light, bearing on the starboard bow.” “Is it steady or moving astern?” the captain called out. Lookout replied, “Steady, captain,” which meant we were on a dangerous collision course with that ship. The captain then called to the signalman, “Signal that ship: We are on a collision course, advise you change course 20 degrees.” Back came a signal, “Advisable for you to change course 20 degrees.” The captain said, “Send, I’m a captain, change course 20 degrees.” “I’m a seaman second class,” came the reply. “You had better change course 20 degrees.” By that time, the captain was furious. He spat out, “Send, I’m a battleship. Change course 20 degrees.” Back came the flashing light, “I’m a lighthouse.” We changed course.
    • +
    +
  • +
  • The significant problems we face cannot be solved at the same level of thinking we were at when we created them. - Albert Einstein
  • +
  • Happiness is the desire and ability to sacrifice what we want now for what we want eventually.
  • +
  • Interdependent is the choice only independent people can make.
  • +
  • Eternal student syndrome: someone who tries to avoid getting a job by taking more educational courses. It can also refer to a lack of prioritization.
  • +
  • Nothing can hurt me, no one can hurt me without my consent.
  • +
  • Anytime we think the problem is out that with others or in circumstances, that very thought itself is the problem. Because we empower what’s out there to continue to control us.
  • +
  • Measure twice, cut once. Jayme Cox gave me this feedback after my ZooKeeper migrations caused serval high severity incidents.
  • +
  • Management is doing things right, leadership is doing the right things.
  • +
  • E.M. Gray, the author of “The Common Denominator of Success”, found that the one denominator all successful people share wasn’t hard work, good luck, or astute human relations, though those were all important. The one factor that seemed to transcend all the rest embodies the essence of Habit #3 - Putting First Things First. The successful person has the habit of doing the things failors don’t like to do. They don’t like doing them either, necessarily, but their disliking is subordinated to the strength of their purpose.
  • +
  • Time management matrix quadrant 2 - Not urgent, but important things. Everyone of the 7 habits lies in quadrant 2. Everyone of the 7 habits deals with fundamentally important things that if done under regular basis would make a tremendous positive difference in our lives. Like working out and reading, I’ve been working out for 8 years and reading for 2 years, I will keep doing them.
  • +
  • Pareto principle (80/20 rule): 80 percent of results flow out of 20 percent of activities.
  • +
  • Stewardship delegation: Focus on results instead of methods. It gives people a choice of method and make them responsible for results. It takes more time in the beginning, but the time is well invested.
  • +
  • One of the most important way to manifest of integrity is to be loyal to those who are not present. In doing so, we build the trust of those who are present. When you defense those who are absent, you retain the trust of those present.
  • +
  • It is more noble to give yourself completely to one individual than to labor diligently for the salvation of the masses. You’d better have a deep meaningful relationship with your spouse, with your own kids, with your closest working associates, instead of devoting lots of time to the people and projects out there.
  • +
  • If you cannot reach a true win-win, you are very often better off to go for no deal. Win-win or no deal provides tremendous emotional freedom in the family relationship as well. If family members cannot agree on the video that everyone will enjoy, they can simply decide to so something else, no deal, rather than having someone enjoy the evening and expense others.
  • +
  • Seek first to understand, then to be understood. This principle is the key to effective inter-personal communication.
  • +
  • If you don’t have confidence in the diagnosis, you won’t have confidence in the prescription.
  • +
  • Four Autobiographical Responses. Can’t wait to have conversations with my daughtor with reflect feeling.
  • +
  • Whenever we deal with differences, value others perspectives, and try to understand.
  • +
  • Having a balanced program for self-renewal in the four areas of your life: physical, spritual, mental, and social/emotional.
  • +
+
+

No Hard Feelings: The Secret Power of Embracing Emotions at Work

+

No Hard Feelings: The Secret Power of Embracing Emotions at Work

+
    +
  • FOMO: Fear Of Missing Out.
  • +
  • Be less passion about your job does’t mean stop caring about work. It means care more about yourself. It means carve out time for the people your love, for exercise, and for guilt-free vacation.
  • +
  • The physcial experience of stress or anxiety, a faster heart beat and higher levels of stress hormones, is almost identical to our body’s response to excitement. People who take the advantage of this similarity by reframing their stress as excitement (for example, by saying “I am excited” out loud) perform better. The greatest weapon against stress is our ability to choose one thought over another.
  • +
  • When you’re upset, it feels good to run to someone in your support network, the group of people who will immediately take your side. But if you talk to only these people, you sabotage your ability to learn from or fix the problem. Make sure you also confide in your challenge network, the people who will tell you the hard truths and push you to resolve the issue.
  • +
  • The easiest way to feel better is to complete the thing that is stressing you out. Nothing diminishes anxiety faster than action.
  • +
  • If you’re asking for more money (either for your starting salary in a new job or for a raise at your existing job), try this magic line: “I don’t want my salary to be a distraction to me while I’m in this role.” By saying you don’t want your salary to be a distraction (i.e., distractingly low), you are stating a fact that both you and the other person believe to be true. You are having empathy for both yourself and the other party. They also don’t want you to be distracted.
  • +
  • BlackRock uses a number of icebreakers when starting conversations. One has employees split into pairs and answer the prompt, “When you think of your childhood, what meal comes to mind and why?” This disarming question sets the stage for more disclosure later. “No one just says pizza,” explains managing director Jonathan McBride. “Instead, they give you a story about their family, their culture and upbringing, and weekly traditions with their parents or grandparents. Even though you’re discussing food, you get a story about someone’s life and family that you wouldn’t normally get in five minutes.”
  • +
  • If two men on the same job agree all the time, then one is useless. If they disagree all the time, both are useless.
  • +
  • Conduct premortems. Set aside half an hour at the outset of a project and have team members list everything they fear might go wrong. This allows the team to fully understand and address potential risks.
  • +
+
+

Quiet: The Power of Introverts in a World That Can't Stop Talking

+

Quiet: The Power of Introverts in a World That Can’t Stop Talking

+
    +
  • Extroverted leaders enhance group performance when employees are passive, but the introverted leaders are more effective with proactive employees.
  • +
  • Introverts are more likely to hear and implement suggestions because of their inclination to listen to others and lack of interest in dominating social situations.
  • +
  • The high-reactive infants are more likely to have developed serious careful personalities, the low-reactive infants, the quiet ones, are more likely to have become relaxed and confident types. High and low reactivity tend to be related to introversion and extroversion.
  • +
  • We can stretch our personalities, but only up to a point. Our inborn temperaments influence us, regardless of the lives we lead. A sizable part of who we are is all ordained by our genes, by our brains, by our nervous systems. Yet the elasticity that found in some high-reactive teens also suggests the converse: we have free will, and can use it to shape our personalities. These seem like contradictory principles, but they are not. Free will can take us far, but cannot carry us infinitely beyond our genetic limits. We might call this the “rubber band theory” of personality: we are like rubber bands at rest, we are elastic and can stretch ourselves, but only so much.
  • +
  • Introverts who are specially good at acting like extroverts (pseudo-extroversion skills) tend to score high for a trait that psychologists called “self monitoring”. Self-monitors are highly skilled at modifying their behavior to the social demands of a situation. When in Rome, they do as what Romans do. As an introvert, I’d like to become an self-monitor.
  • +
  • If introverts and extroverts are the north and south of the temperament, opposite in a single spectrum, then how can they possibly get alone. Yet the two types are often drawn to each other, in friendship, business, and especially romance. These pairs can enjor great excitment and mutually admiration, a sense that each completes the other, one tends to listen, the other to talk. But it can also cause problems when members of these unions pull in opposite directions.
  • +
  • Some thoughts for parents: if you are lucky enough to have control over where your child goes to school, you can look for school that +
      +
    • praises independent interests and ephamsizes autonomy
    • +
    • conducts group activities in moderation in a small carefully-managed groups
    • +
    • values kindness, caring, empathy, good citizenship
    • +
    • insists on orderly classrooms and hallways is organized in a small quiet classes
    • +
    • chooses teachers who seem to understand the shy series introverted sensitive temperment
    • +
    • focuses its academic, atheletic, extracurricular activities on subjects that are particularily interesting to your child
    • +
    • strongly enforces an anti-bulling program
    • +
    • emphsizes a tolerant, down-to-earth culture
    • +
    • attracts like-minded peers, for example, intellectual kids, or artist or atheletic ones, depending on your child’s preferences
    • +
    +
  • +
  • Rule of thumb for networking events: one new honest-to-goodness relationship is worth ten fistful of business cards. Respect your loved ones’ need for socializing, and your own for solitude.
  • +
+
+

Make Your Bed: Little Things That Can Change Your Life...and Maybe the World

+

Make Your Bed: Little Things That Can Change Your Life…and Maybe the World

+
    +
  • If you make your bed every morning, you’ve have accomplished the first task in the day. It will give you a small sense of pride, and it will encourage you to do another task, and another, and another. By the end of the day, that one task completed will turn into many tasks completed. Making your bed will also reinforce the fact that little thing in life matter. If you can’t do the little things right, you will never do the big things right. And if by any chance you have a miserable day, you will come home to a bed that is made, that you made. And a made bed gives you an encouragement that tomorrow will be better. If you want to change the world, start of by making your bed. It is the same idea as a Chinese ancient saying “一屋不扫,何以扫天下”.
  • +
  • Prove me wrong. SEAL training is always about proving something. Proving that the size didn’t matter. Proving that the color of your skin wasn’t important. Proving that money didn’t make you better. Proving that the determination and grit is always more important than talent.
  • +
  • A “sugar cookie” is a punishment given to Navy SEAL trainees who fail a uniform inspection. The punishment involves running into the water, getting wet from head to toe, and rolling around in the sand until covered in sand. The trainee must stay in their uniform the rest of the day, cold, wet, and sandy.
  • +
  • A circus is two hours of additional calisthenics designed to wear you down, to break your spirit, to force you to quit. Those students who did two hours of extra calisthenics got stronger and stronger. The paying of circuses built inner strength and physical resiliency. Life is filled of circuses. You will fail. You will likely fail often. It will be painful. It will be discouraging. At time it will test you to your very core. If you want to change the world, don’t be afraid for circuses.
  • +
  • Highly recommend this video: https://www.youtube.com/watch?v=pxBQLFLei70&ab_channel=TexasExes, which covers most of the content in the book. I promise you will not regret spending 20 minutes watching this video.
  • +
+

/end

+
+
+
+
+ + + + + \ No newline at end of file diff --git a/blog/building-netflix-prize-prediction-model.html b/blog/building-netflix-prize-prediction-model.html new file mode 100644 index 00000000..6cd78b1d --- /dev/null +++ b/blog/building-netflix-prize-prediction-model.html @@ -0,0 +1,180 @@ + + + + + + + + + Building Netflix Prize Prediction Model • Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+
+
+

Building Netflix Prize Prediction Model

+ +
+
+
+

Netflix Prize competition was hold by Netflix Inc. in Oct 2006. The main goal of this competition was to predict how many score a user will rate for a movie, by learning a test set containing nearly 100 million customer rating records.

+
+

Description

+

Given the 100 million customer rating records, focused on the following tasks:

+
    +
  1. Predicted the existed records by data analysis techniques (Decision tree, ANN, KNN, etc.), and computed the RMSE (Root mean squared error) of different model, and then compare them.
  2. +
  3. Forecasted whether one customer will be in favor of one released movie.
  4. +
  5. Given essential information (directors, genres, casts, etc) of a movie, predicted which group of customers will love it, and which group of customers will dislike it.
  6. +
+

Poster

+

+netflix-project-poster +

+ + +

/end

+
+
+
+
+ + + + + \ No newline at end of file diff --git a/blog/danger-bot-2-tutorial-video.html b/blog/danger-bot-2-tutorial-video.html new file mode 100644 index 00000000..571fa6bc --- /dev/null +++ b/blog/danger-bot-2-tutorial-video.html @@ -0,0 +1,170 @@ + + + + + + + + + Danger Bot 2.0 Tutorial Video • Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+ +
+ + + + + \ No newline at end of file diff --git a/blog/danger-bot-2-use-case.html b/blog/danger-bot-2-use-case.html new file mode 100644 index 00000000..564ece59 --- /dev/null +++ b/blog/danger-bot-2-use-case.html @@ -0,0 +1,216 @@ + + + + + + + + + Danger Bot 2.0 Use Case • Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+
+
+

Danger Bot 2.0 Use Case

+ +
+
+
+

The below table demonstrates an elaborated use case of the Danger Bot 2.0.

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsCommentsExplanation
1An initial pull-request comment created by the Danger Bot 2.0.
2When students add a new comment /dispute 846d e29c 4805, the bot will immediately reply to students and notify the teaching staff to review student code and especially check for guideline violations associated with those UUIDs.
3After inspecting student-submitted code, the teaching staff cancel one or more unresolved violations by inserting a new comment on the pull-request page /cancel 61df 846d 4f9c 9e09. The new comment will eventually trigger the bot to adjust its feedback.
4The canceled violations are moved to the bottom of the table, with strikethrough messages and green check icons in front of the message. Note that teaching staff can cancel zero or more guideline violations disputed by students, along with other unresolved violations that they think can be bypassed.
5After students submit new code changes, the bot check the code again and mark some guideline violations (7d1a and e29c) as resolved.
6The teaching staff always have the right to bypass the decision of the bot by adding a new comment with message /confirm e29c.
7The violation e29c that cancelled by the bot becomes unresolved again.
+

References

+ +

/end

+
+
+
+
+ + + + + \ No newline at end of file diff --git a/blog/devops-continuous-intergration-and-continuous-deployment-pipeline.html b/blog/devops-continuous-intergration-and-continuous-deployment-pipeline.html new file mode 100644 index 00000000..79b7b0fd --- /dev/null +++ b/blog/devops-continuous-intergration-and-continuous-deployment-pipeline.html @@ -0,0 +1,183 @@ + + + + + + + + + DevOps Continuous Integration (CI) and Continuous Deployment (CD) Pipeline • Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+
+
+

DevOps Continuous Integration (CI) and Continuous Deployment (CD) Pipeline

+ +
+
+
+

I worked with my classmates to build a DevOps continuous integration and continuous deployment pipeline. The pipeline contains 4 components, which are a build component, a testing and analysis component, a deployment component, and an incremental testing toolkit.

+
+

Description

+
    +
  1. Created an Incremental Testing Toolkit to achieve test prioritization and shorten test time by 67%.
  2. +
  3. Ran Behavior Driven Test and Static Analysis Tool on Git hook to accept or reject a commit.
  4. +
  5. Set up Jenkins build server on AWS EC2 to run continuous testing on each Git commit.
  6. +
  7. Deployed code to Canary and Production Server continuously using Ansible.
  8. +
  9. Accomplished load balancing, auto-scaling, monitoring, and feature flag using Node.js.
  10. +
+

Workflow

+

+milestone-1-4-workflow +

+ + +
+

/end

+
+
+
+
+ + + + + \ No newline at end of file diff --git a/blog/how-to-conquer-the-object-oriented-design-and-development-course-part-I.html b/blog/how-to-conquer-the-object-oriented-design-and-development-course-part-I.html new file mode 100644 index 00000000..97a12fee --- /dev/null +++ b/blog/how-to-conquer-the-object-oriented-design-and-development-course-part-I.html @@ -0,0 +1,200 @@ + + + + + + + + + How to conquer the Object-Oriented Design and Development (OODD) course? — Part I • Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+
+
+

How to conquer the Object-Oriented Design and Development (OODD) course? — Part I

+ +
+
+
+

Hello everyone, my name is Zhewei Hu. I am a site reliability engineer at Pinterest. Before that, I was a Ph.D. student under the direction of Dr. Ed Gehringer. I was the teaching assistant for the Object-Oriented Design and Development (OODD) course, aka. CSC/ECE 517 for more than 4 years. I’d like to share some of my experience to help you conquer this course and get A+ (There are 1000 regular credits with many extra credits. If you could get 970 credits or more, you will receive an A+.). I will discuss my experience based on the syllabus and make the content as short as possible. This is the first part.

+
+

Part I - Homework (405 pts)

+

Programs (325 pts)

+

Ruby program (35 pts)

+
    +
  • You are required to solve LeetCode-like problems in Ruby.
  • +
  • Teaching staff will use automated tests to test your code. If your programs pass all tests, you will get full credits.
  • +
+

Ruby on Rails program (70 pts)

+
    +
  • Please start as soon as possible.
  • +
  • Try to meet all the requirements including extra-credit ones (trust me, they are not difficult).
  • +
  • Most of the time, the UI does not need to be pretty unless explicitly mentioned in the requirements.
  • +
  • Deploy your application to one cloud platform. Heroku is a good choice.
  • +
+

OSS project (80 pts) and Final project (140 pts)

+
    +
  • Please start as soon as possible.
  • +
  • If you have any questions, please ask your mentor.
  • +
  • Please read the general requirements at the top of project docs. It may only take 5 minutes, but you can earn 3-5 points or even more after reading.
  • +
  • Please make sure your code pass the Travis CI. If you make some changes to the source code, please also change the corresponding tests.
  • +
  • Please resolve the CodeClimate issues as many as you can. Some issues, such as abc complexity, can be ignored. You could ask teaching staff to approve these issues.
  • +
+

Writing assignments (80 pts)

+
    +
  • Please do not include the introduction to Expertiza. This is redundant and the professor does not like it.
  • +
  • Please do not paste many code to the wiki page since we already have GitHub pull requests.
  • +
  • Please fit your screenshots to the wiki page.
  • +
  • If your project relates to UI changes, it is a good idea to manually change the html code and make screenshots to show the final version of the UI to the reader (although you haven’t written any code when writing the wiki page).
  • +
  • User stories are a good ways to show the whole functionality.
  • +
  • Please refer to wiki pages in previous years.
  • +
+

Part II (595 pts)

+ +

/end

+
+
+
+
+ + + + + \ No newline at end of file diff --git a/blog/how-to-conquer-the-object-oriented-design-and-development-course-part-II.html b/blog/how-to-conquer-the-object-oriented-design-and-development-course-part-II.html new file mode 100644 index 00000000..68c2b97f --- /dev/null +++ b/blog/how-to-conquer-the-object-oriented-design-and-development-course-part-II.html @@ -0,0 +1,192 @@ + + + + + + + + + How to conquer the Object-Oriented Design and Development (OODD) course? — Part II • Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+
+
+

How to conquer the Object-Oriented Design and Development (OODD) course? — Part II

+ +
+
+
+

Hello everyone, my name is Zhewei Hu. I am a site reliability engineer at Pinterest. Before that, I was a Ph.D. student under the direction of Dr. Ed Gehringer. I was the teaching assistant for the Object-Oriented Design and Development (OODD) course, aka. CSC/ECE 517 for more than 4 years. I’d like to share some of my experience to help you conquer this course and get A+. This is the second part.

+
+

Part I - Homework (405 pts)

+ +

Part II (595 pts)

+

Reviews (120 pts)

+
    +
  • You are required to do both peer reviews and teammate reviews for “Ruby on Rails program”, “OSS project”, and “Final project”. If you do not know how to do reviews in Expertiza, please ask teaching staff.
  • +
  • For review messages, please write as elaborate as you can. If you only write words like “Awesome”, “Nice”, “Good”, you will get a very low grade because we will calculate the valid words in your review messages.
  • +
  • If you forgot doing reviews, don’t worry! Just ask the professor for help. :)
  • +
+

Exams (360 pts)

+
    +
  • You can bring your own laptop with Internet connection during exams. Volia!
  • +
  • Please do not communicate with each other during exams.
  • +
  • Please prepare for the exams in advance. Even though you have the access to the Internet, you will not be able to find any exam questions online. Also, if you try to understand some materials during the exam, you will not have enough time to finish the exam.
  • +
+

Quizzes (5 pts. each, 70 pts in total)

+
    +
  • Please finish quizzes in Webassign each week before class.
  • +
  • After finishing each quiz, you need to answer another question about whether you need this week’s quiz credit. You need to select “Yes” in order to receive the credit. It is confusing, right? Me too. You could ask the processor for the reason.
  • +
+

Attendance and Extra Credits (5 pts. per class for up to 9 classes, 45 pts in total)

+
    +
  • Teaching staff decide whether you attend the class based on whether you submit the Google forms during the class.
  • +
  • There are may ways to earn extra credits, for instance, helping classmates set up the development environment, doing extra peer reviews. Please ask teaching staff for detailed information.
  • +
+

/end

+
+
+
+
+ + + + + \ No newline at end of file diff --git a/blog/ibm-summer-intern-projects-chef-kubernetes.html b/blog/ibm-summer-intern-projects-chef-kubernetes.html new file mode 100644 index 00000000..fff179c0 --- /dev/null +++ b/blog/ibm-summer-intern-projects-chef-kubernetes.html @@ -0,0 +1,173 @@ + + + + + + + + + IBM Summer Intern: Chef and Kubernetes Projects • Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+
+
+

IBM Summer Intern: Chef and Kubernetes Projects

+ +
+
+
+

I interned at IBM Aspera DevOps team as a software engineer during 2017 summer. My first project is related to a configuration management tool named Chef. My second project is related to a container orchestration tool named Kubernetes.

+
+

Description

+
    +
  1. Created infrastructure test suites written by InSpec testing framework to verify configuration results converged by Test Kitchen or +configured by Chef.
  2. +
  3. Set up Cron jobs to monitor infrastructure settings in real-time and send notification emails via SendGrid if exceptions occur.
  4. +
  5. Ported a big data sharing platform to Kubernetes cluster with etcd as distributed key-value store and Calico as CNI network plugin.
  6. +
  7. Replaced Nginx service with Nginx Ingress Controller that manages Ingress rules enabling inbound traffic to applications.
  8. +
+

/end

+
+
+
+
+ + + + + \ No newline at end of file diff --git a/blog/my-first-week-at-pinterest.html b/blog/my-first-week-at-pinterest.html new file mode 100644 index 00000000..3f219230 --- /dev/null +++ b/blog/my-first-week-at-pinterest.html @@ -0,0 +1,170 @@ + + + + + + + + + My First Week at Pinterest • Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+
+
+

My First Week at Pinterest

+ +
+
+
+

I just finished my first week at Pinterest. Summarize my feeling in two words: awesome and fantastic! Fun fact: I met CEO Ben Silbermann four times in person (twice in a cafeteria, once in a corridor and once in happy hour).

+
+

Looking Back on the Last Five Years, Looking Forward to the Next Five Years

+

I came to America in 2014. It has been five years since then.

+

When I first studied at NC State University as a masters student, I never knew that I would get a Ph.D. degree and join Pinterest.

+

People may foresee the beginning but never know the ending. We need to withstand loneliness, accept failure, do the right (maybe not easy) things.

+

I am looking forward to the next five years!

+

/end

+
+
+
+
+ + + + + \ No newline at end of file diff --git a/blog/offers-com-summer-intern-kpi-report.html b/blog/offers-com-summer-intern-kpi-report.html new file mode 100644 index 00000000..f8839867 --- /dev/null +++ b/blog/offers-com-summer-intern-kpi-report.html @@ -0,0 +1,172 @@ + + + + + + + + + Offers.com Summer Intern: KPI Report • Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+
+
+

Offers.com Summer Intern: KPI Report

+ +
+
+
+

A KPI report for marketing team using Ruby on Rails as web application framework, Sequel as ORM layer for mapping records to Ruby objects and handling associated records and PostgreSQL on AWS as the database.

+
+

Description

+
    +
  1. Utilized Ruby on Rails, Sequel, and PostgreSQL to build a Key Performance Index (KPI) report for the marketing team.
  2. +
  3. Fixed more than 15 issues from JIRA scrum board using Agile methodology.
  4. +
  5. Implemented Rubocop on six projects to enforce coding guidelines (corrected more than 7000 LOC).
  6. +
  7. Created a pre-commit git hook to ensure the quality of commits.
  8. +
+

/end

+
+
+
+
+ + + + + \ No newline at end of file diff --git a/blog/openmrs-security-evaluation.html b/blog/openmrs-security-evaluation.html new file mode 100644 index 00000000..e407eba5 --- /dev/null +++ b/blog/openmrs-security-evaluation.html @@ -0,0 +1,177 @@ + + + + + + + + + OpenMRS Security Evaluation • Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+
+
+

OpenMRS Security Evaluation

+ +
+
+
+

Open Medical Record System (OpenMRS®) was created in 2004 as a open source medical record system platform for developing countries – a tide which rises all ships. +Read more at: About OpenMRS

+
+

Description

+
    +
  1. Performed a security review based upon the OWASP Top 10, the CWE/SANS Top 25, and generated static analysis report.
  2. +
  3. Documented the findings and providing remediation suggestions to correct and adverse findings.
  4. +
  5. Drew a threat model using the Microsoft Threat Modeling Tool (MSTMT).
  6. +
  7. Developed abuse/misuse diagram for one of the system modules.
  8. +
  9. Detailed misuse case description for one of the attacks in the abuse/misuse case diagram.
  10. +
  11. Made ten security requirements (either functional or non-functional) for OpenMRS.
  12. +
  13. Developed an attack tree for one module within OpenMRS.
  14. +
  15. Evaluated one of the system modules against Jakob Nielson’s Ten Usability Heuristics.
  16. +
+

/end

+
+
+
+
+ + + + + \ No newline at end of file diff --git a/blog/oss-project-user-controller-refactoring-in-expertiza.html b/blog/oss-project-user-controller-refactoring-in-expertiza.html new file mode 100644 index 00000000..604711a0 --- /dev/null +++ b/blog/oss-project-user-controller-refactoring-in-expertiza.html @@ -0,0 +1,194 @@ + + + + + + + + + OSS Project: Users Controller Refactoring in Expertiza • Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+
+
+

OSS Project: Users Controller Refactoring in Expertiza

+ +
+
+
+

This project is related to make contributions to an open-source project named Expertiza. I refactored the existing bad smells following Ruby on Rails best practises, implemented new features related to user model and writing RSpec tests with two team members.

+
+

Description

+
    +
  • Find the un-called methods if any and delete them.
  • +
  • Change the Rails 2 syntax to Rails 4 style.
  • +
  • Refactor users_controller.rb
  • +
  • Change the white space for the second half of this file, starts at “def edit”.
  • +
  • Separate the paginate_list method into two methods. The search method should be in model and the paginating method should be in the controller.
  • +
  • New feature: delete users +
      +
    • A user can be deleted if (s)he has not participated in an assignment.
    • +
    • If the user is participating in an assignment, the system will ask, “User is participating in k assignments. Delete as a participant in these assignment(s)?”
    • +
    • If the user has submitted or reviewed in any of these assignments, the system will say the user cannot be deleted, but offer to rename the user account to _hidden. +
        +
      • rename (javascript calling update method in users_controller.rb)
      • +
      • different users have different delete methods.
      • +
      +
    • +
    • If the person trying to delete does not want to rename the account, the system will just say that the user can’t be deleted.
    • +
    +
  • +
  • Write Rspec unit test and increase the test coverage to 28%.
  • +
+ + +
+

/end

+
+
+
+
+ + + + + \ No newline at end of file diff --git a/blog/phd-defense.html b/blog/phd-defense.html new file mode 100644 index 00000000..2b11fb58 --- /dev/null +++ b/blog/phd-defense.html @@ -0,0 +1,178 @@ + + + + + + + + + Ph.D. Dissertation: Helping Students Make Better Contributions to Open-Source Software Projects • Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+
+
+

Ph.D. Dissertation: Helping Students Make Better Contributions to Open-Source Software Projects

+ +
+
+
+

On May 23rd 2019, I successfully defensed my Ph.D. dissertation: “Helping Students Make Better Contributions to Open-Source Software Projects”.

+
+

I owe my sincere thanks to Dr. Edward Gehringer, my advisor, for his all-time support and +guidance. I am very grateful to him for his valuable time, continuous advice and patient feedback. I learned a lot from our weekly meetings and his insights that helped me to generate creative ideas in my mind.

+

I would like to thank my other committee members, Dr. Christopher Parnin, Dr. Sarah Heckman, +sand Dr. Ranga Vatsavai, for being my committee and providing valuable feedback about the work.

+

I thank Yang Song, my good teacher, and helpful friend, for recommending me to join Dr. +Gehringer’s research team, guiding and cooperating with me to finish many papers, and going +fishing with me.

+

Finally, I thank all other friends for their encouragement and supports at every moment.

+

Supplementary Materials

+ +

/end

+
+
+
+
+ + + + + \ No newline at end of file diff --git a/blog/procore-summer-intern-project-reactjs-relay-graphql-kubernetes.html b/blog/procore-summer-intern-project-reactjs-relay-graphql-kubernetes.html new file mode 100644 index 00000000..bc430a40 --- /dev/null +++ b/blog/procore-summer-intern-project-reactjs-relay-graphql-kubernetes.html @@ -0,0 +1,172 @@ + + + + + + + + + Procore Summer Intern: ReactJS, Relay, GraphQL and Kubernetes Project • Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+
+
+

Procore Summer Intern: ReactJS, Relay, GraphQL and Kubernetes Project

+ +
+
+
+

During 2018 summer, I interned as a site reliability engineer at Procore Technologies, which is a world’s leading construction project management software company. My project was to build a new UI and implement the GraphQL API for an on-demand staging environment.

+
+

Description

+
    +
  1. Implemented a GraphQL API for an on-demand staging environment to manage Kubernetes resources on Tectonic.
  2. +
  3. Built the front end of the staging environment using React as the JavaScript library and Relay as the data management solution.
  4. +
  5. Wrote RSpec request specs for the whole GraphQL API.
  6. +
  7. Set up CircleCI to continuously run RSpec tests, build docker images and push docker images to Quay.io.
  8. +
+

/end

+
+
+
+
+ + + + + \ No newline at end of file diff --git a/blog/refactor-staggered-deadline-assignments-in-expertiza.html b/blog/refactor-staggered-deadline-assignments-in-expertiza.html new file mode 100644 index 00000000..d7dd3943 --- /dev/null +++ b/blog/refactor-staggered-deadline-assignments-in-expertiza.html @@ -0,0 +1,182 @@ + + + + + + + + + Refactor staggered-deadline assignments in Expertiza • Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+
+
+

Refactor staggered-deadline assignments in Expertiza

+ +
+
+

What is staggered-dealine assignment?

+
+

This project is related to the “Wiki 1a” and “Wiki 1b” assignment in NC State CSC 517 class. They were structured as separate assignments, with separate signup sheets, teams, and reviews. But actually, since only one of the two assignments was done by any student, it would’ve been better to have a single assignment. Still, some topics could be done soon after the course started, whereas others were better done after we had studied related topics in class.

+
+
+

This raises the idea of a “staggered-deadlne assignment”, where different topics have different submission and review deadlines, rather than all topics having the same deadline.

+
+

Description

+
    +
  1. Refactor signup_sheet_controller.rb to implement staggered-deadline addignment and dependency graphs between topics.
  2. +
  3. Test the “varying rubric by rounds” feature to make sure it works OK.
  4. +
  5. Write Rspec unit test and increase the test coverage by 1.01%.
  6. +
+ + +
+

/end

+
+
+
+
+ + + + + \ No newline at end of file diff --git a/blog/sigcse-2019-poster-using-bots-to-improve-github-pull-request-feedback.html b/blog/sigcse-2019-poster-using-bots-to-improve-github-pull-request-feedback.html new file mode 100644 index 00000000..8a065004 --- /dev/null +++ b/blog/sigcse-2019-poster-using-bots-to-improve-github-pull-request-feedback.html @@ -0,0 +1,175 @@ + + + + + + + + + SIGCSE 2019 Poster: Using Bots to Improve GitHub Pull-Request Feedback • Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+
+
+

SIGCSE 2019 Poster: Using Bots to Improve GitHub Pull-Request Feedback

+ +
+
+
+

Rising enrollments make it difficult for instructors and teaching assistants to give adequate feedback on each student’s work. Our course projects require students to submit GitHub pull requests as deliverables for their open-source software (OSS) projects. We have set up a static code analyzer and a continuous integration service on GitHub to help students check different aspects of the code. However, these tools have some limitations.

+
+

Description

+

In this poster, I discuss how we bypass the limitations of existing tools by implementing three Internet bots. These bots are either open source or free for OSS projects and can be easily integrated with any GitHub repositories. One-hundred one Computer Science and Computer Engineering masters students participated in our study. The survey results showed that more than 84% of students thought bots can help them to contribute code with better quality. We analyzed 391 pull requests. Results revealed that bots can provide more timely feedback than teaching staff. The Danger Bot can significantly reduce system-specific guideline violations (by 42%), and the Code Climate Bot can significantly decrease code smells in student contributions (by 60%). However, we found that the Travis CI Bot did not help student contributions pass automated tests.

+

Poster

+

+sigcse-poster +

+

Steps to set up bots on your repoistory

+ +

/end

+
+
+
+
+ + + + + \ No newline at end of file diff --git a/blog/software-development-process-bad-smell-detection.html b/blog/software-development-process-bad-smell-detection.html new file mode 100644 index 00000000..20e93de3 --- /dev/null +++ b/blog/software-development-process-bad-smell-detection.html @@ -0,0 +1,176 @@ + + + + + + + + + Software Development Process Bad Smell Detection • Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+
+
+

Software Development Process Bad Smell Detection

+ +
+
+
+

The goal of this project is to detect bad smells in the software development process by looking at the commits, issues, pull requests, labels and milestones in GitHub repositories. I worked with my classmates to analyze three projects and extracted 14 features to describe the software development process. We built six bad smell detectors to automatically analyze GitHub repositories. We also designed two metrics to provide warnings to teams in the early stage of the software development process.

+
+

Description

+
    +
  1. Used gitable.py to collect information from a specific Github Repo and store in the format of JSON.
  2. +
  3. Wrote 14 feature extractors to further process the raw JSON data.
  4. +
  5. Implemented six bad smell detectors to detect whether this repo exists some bad smells during development process, such as “Issue Time Duration Detector”.
  6. +
  7. Implemented two early warning detectors (“Issue Duration Early Warning” and “Issue Interval Early Warning”) to give early warnings of bad smell patterns.
  8. +
+ + +

/end

+
+
+
+
+ + + + + \ No newline at end of file diff --git a/blog/storyboards.html b/blog/storyboards.html new file mode 100644 index 00000000..fd3620f9 --- /dev/null +++ b/blog/storyboards.html @@ -0,0 +1,187 @@ + + + + + + + + + Storyboards • Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+
+
+

Storyboards

+ +
+
+
+

Storyboarding is used in software development as part of identifying the specifications for a particular set of software. It is useful during software engineering because it helps the user understand exactly how the software will work, much better than an abstract description. It is also cheaper to make changes to a storyboard than an implemented piece of software.

+
+

Description

+

Designed an agile software project management tool using Ruby on Rails.

+ +
    +
  • Website +
      +
    • Admin account +
        +
      • Username: admin@ncsu.edu
      • +
      • Password: admin
      • +
      +
    • +
    • Developer account +
        +
      • Username: zhewei.hu33@gmail.com
      • +
      • Password: 12345
      • +
      +
    • +
    +
  • +
  • Source code
  • +
+

/end

+
+
+
+
+ + + + + \ No newline at end of file diff --git a/blog/web-crawler-application-scraping.html b/blog/web-crawler-application-scraping.html new file mode 100644 index 00000000..e5713cb0 --- /dev/null +++ b/blog/web-crawler-application-scraping.html @@ -0,0 +1,177 @@ + + + + + + + + + Web Crawler Application – Scraping • Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+
+
+

Web Crawler Application – Scraping

+ +
+
+
+

I worked with my classmates to build a tool that makes it easier for customers to find cars and their price ranges online. Customers can subscribe to our service and enter information about the car. The tool then start to look for satisfied cars, as well as price ranges offered by a popular vehicle valuation company.

+
+

Description

+

According to information provided by the customer–make, model, year, mileage, we found cars on Craiglist and obtained the price ranges from Kbb. Then our tool sends an email to the customer every day to provide the latest information.

+

Workflow

+

+ProjectScraping--design +

+ + +
+

/end

+
+
+
+
+ + + + + \ No newline at end of file diff --git a/blogs/index.html b/blogs/index.html new file mode 100644 index 00000000..4d4f24b0 --- /dev/null +++ b/blogs/index.html @@ -0,0 +1,543 @@ + + + + + + + + + Blogs | Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+
+
+

+ + Books I Finished In 2023 + +

+ +
+

The book I finished in 2023 with notes. The Simple Path to Wealth: Your Road Map to Financial Independence and a Rich, Free Life The market always goes up. Investment portfolio: Stocks (VTSAX) + bonds (VBTLX) + cash,... Keep reading »

+
+
+
+

+ + Books I Finished In 2022 + +

+ +
+

The book I finished in 2022 with notes. Maybe You Should Talk To Someone: A Therapist, HER Therapist, and Our Lives Revealed A therapists also needs to see another therapist just like us. The Space Race Many astronauts... Keep reading »

+
+ +
+
+

+ + Danger Bot 2.0 Use Case + +

+ +
+

The below table demonstrates an elaborated use case of the Danger Bot 2.0. Steps Comments Explanation 1 An initial pull-request comment created by the Danger Bot 2.0. 2 When students add a new comment /dispute 846d e29c 4805,... Keep reading »

+
+
+
+

+ + Danger Bot 2.0 Tutorial Video + +

+ +
+

+ This tutorial video demonstrates the two-way communication capability of the Danger Bot 2.0. +References + https://github.com/Winbobob/Improving-Feedback-on-GitHub-Pull-Requests-A-Bots-Approach +/end + Keep reading »

+
+
+
+

+ + My First Week at Pinterest + +

+ +
+

I just finished my first week at Pinterest. Summarize my feeling in two words: awesome and fantastic! Fun fact: I met CEO Ben Silbermann four times in person (twice in a cafeteria, once in a corridor and once... Keep reading »

+
+ + + + + + + + +
+
+

+ + Offers.com Summer Intern: KPI Report + +

+ +
+

A KPI report for marketing team using Ruby on Rails as web application framework, Sequel as ORM layer for mapping records to Ruby objects and handling associated records and PostgreSQL on AWS as the database. Description Utilized Ruby... Keep reading »

+
+ +
+
+

+ + OpenMRS Security Evaluation + +

+ +
+

Open Medical Record System (OpenMRS®) was created in 2004 as a open source medical record system platform for developing countries – a tide which rises all ships. Read more at: About OpenMRS Description Performed a security review based... Keep reading »

+
+ + + + +
+
+

+ + Storyboards + +

+ +
+

Storyboarding is used in software development as part of identifying the specifications for a particular set of software. It is useful during software engineering because it helps the user understand exactly how the software will work, much better... Keep reading »

+
+
+
+

+ + 3D Space Invader + +

+ +
+

I reproduced the classic game Space Invaders, which is considered one of the most influential video games of all time. This game helped expand the video game industry from a novelty to a global industry, and ushered in... Keep reading »

+
+
+
+ + + + + \ No newline at end of file diff --git a/category/automated-program-repair/index.html b/category/automated-program-repair/index.html new file mode 100644 index 00000000..bf24506e --- /dev/null +++ b/category/automated-program-repair/index.html @@ -0,0 +1,162 @@ + + + + + + + + + Automated Program Repair | Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+ + +
+
+ + + + + \ No newline at end of file diff --git a/category/books/index.html b/category/books/index.html new file mode 100644 index 00000000..0ac46b41 --- /dev/null +++ b/category/books/index.html @@ -0,0 +1,201 @@ + + + + + + + + + Books | Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+ +
+
+

+ + Books I Finished In 2023 + +

+ +
+

The book I finished in 2023 with notes. The Simple Path to Wealth: Your Road Map to Financial Independence and a Rich, Free Life The market always goes up. Investment portfolio: Stocks (VTSAX) + bonds (VBTLX) + cash,... Keep reading »

+
+
+
+

+ + Books I Finished In 2022 + +

+ +
+

The book I finished in 2022 with notes. Maybe You Should Talk To Someone: A Therapist, HER Therapist, and Our Lives Revealed A therapists also needs to see another therapist just like us. The Space Race Many astronauts... Keep reading »

+
+ +
+
+ + + + + \ No newline at end of file diff --git a/category/computer-graphics/index.html b/category/computer-graphics/index.html new file mode 100644 index 00000000..0212f9d9 --- /dev/null +++ b/category/computer-graphics/index.html @@ -0,0 +1,162 @@ + + + + + + + + + Computer Graphics | Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+ +
+
+

+ + 3D Space Invader + +

+ +
+

I reproduced the classic game Space Invaders, which is considered one of the most influential video games of all time. This game helped expand the video game industry from a novelty to a global industry, and ushered in... Keep reading »

+
+
+
+ + + + + \ No newline at end of file diff --git a/category/course-advice/index.html b/category/course-advice/index.html new file mode 100644 index 00000000..fae48dc2 --- /dev/null +++ b/category/course-advice/index.html @@ -0,0 +1,179 @@ + + + + + + + + + Course Advice | Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+ + + +
+
+ + + + + \ No newline at end of file diff --git a/category/data-mining/index.html b/category/data-mining/index.html new file mode 100644 index 00000000..f21fd9ca --- /dev/null +++ b/category/data-mining/index.html @@ -0,0 +1,179 @@ + + + + + + + + + Data mining | Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+ + + +
+
+ + + + + \ No newline at end of file diff --git a/category/devops/index.html b/category/devops/index.html new file mode 100644 index 00000000..60d212fa --- /dev/null +++ b/category/devops/index.html @@ -0,0 +1,196 @@ + + + + + + + + + DevOps | Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+ + + + +
+
+ + + + + \ No newline at end of file diff --git a/category/expertiza/index.html b/category/expertiza/index.html new file mode 100644 index 00000000..21f5aae9 --- /dev/null +++ b/category/expertiza/index.html @@ -0,0 +1,213 @@ + + + + + + + + + Expertiza | Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+ + + + + +
+
+ + + + + \ No newline at end of file diff --git a/category/intern/index.html b/category/intern/index.html new file mode 100644 index 00000000..857f9d3f --- /dev/null +++ b/category/intern/index.html @@ -0,0 +1,196 @@ + + + + + + + + + Intern | Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+ + + +
+
+

+ + Offers.com Summer Intern: KPI Report + +

+ +
+

A KPI report for marketing team using Ruby on Rails as web application framework, Sequel as ORM layer for mapping records to Ruby objects and handling associated records and PostgreSQL on AWS as the database. Description Utilized Ruby... Keep reading »

+
+
+
+ + + + + \ No newline at end of file diff --git a/category/personal-thoughts/index.html b/category/personal-thoughts/index.html new file mode 100644 index 00000000..a63fb48a --- /dev/null +++ b/category/personal-thoughts/index.html @@ -0,0 +1,162 @@ + + + + + + + + + Personal Thoughts | Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+ +
+
+

+ + My First Week at Pinterest + +

+ +
+

I just finished my first week at Pinterest. Summarize my feeling in two words: awesome and fantastic! Fun fact: I met CEO Ben Silbermann four times in person (twice in a cafeteria, once in a corridor and once... Keep reading »

+
+
+
+ + + + + \ No newline at end of file diff --git a/category/research/index.html b/category/research/index.html new file mode 100644 index 00000000..4fdef932 --- /dev/null +++ b/category/research/index.html @@ -0,0 +1,218 @@ + + + + + + + + + Research | Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+ +
+
+

+ + Danger Bot 2.0 Use Case + +

+ +
+

The below table demonstrates an elaborated use case of the Danger Bot 2.0. Steps Comments Explanation 1 An initial pull-request comment created by the Danger Bot 2.0. 2 When students add a new comment /dispute 846d e29c 4805,... Keep reading »

+
+
+
+

+ + Danger Bot 2.0 Tutorial Video + +

+ +
+

+ This tutorial video demonstrates the two-way communication capability of the Danger Bot 2.0. +References + https://github.com/Winbobob/Improving-Feedback-on-GitHub-Pull-Requests-A-Bots-Approach +/end + Keep reading »

+
+ + +
+
+ + + + + \ No newline at end of file diff --git a/category/software-development/index.html b/category/software-development/index.html new file mode 100644 index 00000000..e14388fb --- /dev/null +++ b/category/software-development/index.html @@ -0,0 +1,230 @@ + + + + + + + + + Software Development | Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+ + + + + +
+
+

+ + Storyboards + +

+ +
+

Storyboarding is used in software development as part of identifying the specifications for a particular set of software. It is useful during software engineering because it helps the user understand exactly how the software will work, much better... Keep reading »

+
+
+
+ + + + + \ No newline at end of file diff --git a/category/software-security/index.html b/category/software-security/index.html new file mode 100644 index 00000000..f0b73343 --- /dev/null +++ b/category/software-security/index.html @@ -0,0 +1,162 @@ + + + + + + + + + Software Security | Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+ +
+
+

+ + OpenMRS Security Evaluation + +

+ +
+

Open Medical Record System (OpenMRS®) was created in 2004 as a open source medical record system platform for developing countries – a tide which rises all ships. Read more at: About OpenMRS Description Performed a security review based... Keep reading »

+
+
+
+ + + + + \ No newline at end of file diff --git a/feed.xml b/feed.xml new file mode 100644 index 00000000..65f7d963 --- /dev/null +++ b/feed.xml @@ -0,0 +1,190 @@ + + + + Zhewei Hu + DevOps | Ruby on Rails + http://zhewe.me/ + + Mon, 25 Dec 2023 04:58:39 +0000 + Mon, 25 Dec 2023 04:58:39 +0000 + Jekyll v3.8.4 + + + Books I Finished In 2023 + <blockquote> <p>The book I finished in 2023 with notes.</p> </blockquote> <hr /> <p><img src="https://m.media-amazon.com/images/I/414UzZxaSFL._SL500_.jpg" alt="The Simple Path to Wealth: Your Road Map to Financial Independence and a Rich, Free Life" style="width:40%;" /></p> <h1 id="the-simple-path-to-wealth-your-road-map-to-financial-independence-and-a-rich-free-life">The Simple Path to Wealth: Your Road Map to Financial Independence and a Rich, Free Life</h1> <ul> <li>The market always goes up.</li> <li>Investment portfolio: <ul> <li>Stocks (VTSAX) + bonds (VBTLX) + cash, or</li> <li>Target Retirement Fund (TRF): fund of funds</li> </ul> </li> </ul> <hr /> <p><img src="https://m.media-amazon.com/images/I/41nLVU-wQpL._SL500_.jpg" alt="My Life in Full: Work, Family, and Our Future" style="width:40%;" /></p> <h1 id="my-life-in-full-work-family-and-our-future">My Life in Full: Work, Family, and Our... + Sun, 01 Oct 2023 23:59:59 +0000 + http://zhewe.me/blog/books-i-finished-in-2023 + http://zhewe.me/blog/books-i-finished-in-2023 + + audible + + + books + + + + + Books I Finished In 2022 + <blockquote> <p>The book I finished in 2022 with notes.</p> </blockquote> <hr /> <p><img src="https://m.media-amazon.com/images/I/51KrBjE9ajL._SL500_.jpg" alt="Maybe You Should Talk To Someone: A Therapist, HER Therapist, and Our Lives Revealed" style="width:40%;" /></p> <h1 id="maybe-you-should-talk-to-someone-a-therapist-her-therapist-and-our-lives-revealed">Maybe You Should Talk To Someone: A Therapist, HER Therapist, and Our Lives Revealed</h1> <ul> <li>A therapists also needs to see another therapist just like us.</li> </ul> <hr /> <p><img src="https://m.media-amazon.com/images/I/51ll1lebmWL._SL500_.jpg" alt="The Space Race" style="width:40%;" /></p> <h1 id="the-space-race">The Space Race</h1> <ul> <li>Many astronauts have walked on the moon after Neil Armstrong.</li> <li>The International Space Station will be retired in 2030.</li> <li>The private spaceflight companies are playing more and more... + Sat, 31 Dec 2022 23:59:59 +0000 + http://zhewe.me/blog/books-i-finished-in-2022 + http://zhewe.me/blog/books-i-finished-in-2022 + + audible + + + books + + + + + Books I Finished In 2021 + <blockquote> + <p>The book I finished in 2021 with one-sentence notes.</p> +</blockquote> + +<hr /> + +<p><img src="https://m.media-amazon.com/images/I/41dIDDpGepL._SL500_.jpg" alt="Educated: A Memoir" style="width:40%;" /></p> +<h1 id="educated-a-memoir">Educated: A Memoir</h1> +<ul> + <li>Education can change your life.</li> +</ul> + +<hr /> + +<p>/end</p> + + Fri, 31 Dec 2021 23:59:59 +0000 + http://zhewe.me/blog/books-i-finished-in-2021 + http://zhewe.me/blog/books-i-finished-in-2021 + + audible + + + books + + + + + Danger Bot 2.0 Use Case + <blockquote> <p>The below table demonstrates an elaborated use case of the Danger Bot 2.0.</p> </blockquote> <table style="width:100%"> <style> th, td { padding: 10px; } </style> <tr> <th style="width:8%">Steps</th> <th style="width:60%">Comments</th> <th style="width:32%">Explanation</th> </tr> <tr> <td>1</td> <td><img src="/assets/images/danger_bot_use_case_screenshot_1.png" /></td> <td>An initial pull-request comment created by the Danger Bot 2.0.</td> </tr> <tr> <td>2</td> <td><img src="/assets/images/danger_bot_use_case_screenshot_2.png" /></td> <td>When students add a new comment <b>/dispute 846d e29c 4805</b>, the bot will immediately reply to students and notify the teaching staff to review student code and especially check for guideline violations associated with those UUIDs.</td> </tr> <tr> <td>3</td> <td><img src="/assets/images/danger_bot_use_case_screenshot_3.png" /></td> <td>After inspecting student-submitted code,... + Sun, 11 Jul 2021 00:00:01 +0000 + http://zhewe.me/blog/danger-bot-2-use-case + http://zhewe.me/blog/danger-bot-2-use-case + + internet-bot + + + research + + + + + Danger Bot 2.0 Tutorial Video + <blockquote> + <p>This tutorial video demonstrates the two-way communication capability of the Danger Bot 2.0.</p> +</blockquote> + +<div class="video-responsive"><iframe width="850" height="850" src="http://www.youtube.com/embed/kJbpjOAmz7A?color=white&amp;theme=light" allowfullscreen=""></iframe></div> + +<h2 id="references">References</h2> +<ul> + <li><a href="https://github.com/Winbobob/Improving-Feedback-on-GitHub-Pull-Requests-A-Bots-Approach">https://github.com/Winbobob/Improving-Feedback-on-GitHub-Pull-Requests-A-Bots-Approach</a></li> +</ul> + +<p>/end</p> + + Sun, 11 Jul 2021 00:00:00 +0000 + http://zhewe.me/blog/danger-bot-2-tutorial-video + http://zhewe.me/blog/danger-bot-2-tutorial-video + + internet-bot + + + research + + + + + My First Week at Pinterest + <blockquote> <p>I just finished my first week at Pinterest. Summarize my feeling in two words: awesome and fantastic! Fun fact: I met CEO Ben Silbermann four times in person (twice in a cafeteria, once in a corridor and once in happy hour).</p> </blockquote> <h2 id="looking-back-on-the-last-five-years-looking-forward-to-the-next-five-years">Looking Back on the Last Five Years, Looking Forward to the Next Five Years</h2> <p>I came to America in 2014. It has been five years since then.</p> <p>When I first studied at NC State University as a masters student, I never knew that I would get a Ph.D. degree and join Pinterest.</p> <p>People may foresee the... + Sat, 24 Aug 2019 00:10:40 +0000 + http://zhewe.me/blog/my-first-week-at-pinterest + http://zhewe.me/blog/my-first-week-at-pinterest + + pinterest + + + personal-thoughts + + + + + How to conquer the Object-Oriented Design and Development (OODD) course? — Part II + <blockquote> <p>Hello everyone, my name is Zhewei Hu. I am a site reliability engineer at Pinterest. Before that, I was a Ph.D. student under the direction of Dr. Ed Gehringer. I was the teaching assistant for the Object-Oriented Design and Development (OODD) course, aka. CSC/ECE 517 for more than 4 years. I’d like to share some of my experience to help you conquer this course and get A+. This is the second part.</p> </blockquote> <h2 id="part-i---homework-405-pts">Part I - Homework (405 pts)</h2> <ul> <li><a href="/blog/how-to-conquer-the-object-oriented-design-and-development-course-part-I">Link</a></li> </ul> <h2 id="part-ii-595-pts">Part II (595 pts)</h2> <h3 id="reviews-120-pts">Reviews (120 pts)</h3> <ul> <li>You are required to do... + Tue, 06 Aug 2019 00:00:00 +0000 + http://zhewe.me/blog/how-to-conquer-the-object-oriented-design-and-development-course-part-II + http://zhewe.me/blog/how-to-conquer-the-object-oriented-design-and-development-course-part-II + + oodd + + + course-advice + + + + + How to conquer the Object-Oriented Design and Development (OODD) course? — Part I + <blockquote> <p>Hello everyone, my name is Zhewei Hu. I am a site reliability engineer at Pinterest. Before that, I was a Ph.D. student under the direction of Dr. Ed Gehringer. I was the teaching assistant for the Object-Oriented Design and Development (OODD) course, aka. CSC/ECE 517 for more than 4 years. I’d like to share some of my experience to help you conquer this course and get A+ (There are 1000 regular credits with many extra credits. If you could get 970 credits or more, you will receive an A+.). I will discuss my experience based on the syllabus and... + Tue, 06 Aug 2019 00:00:00 +0000 + http://zhewe.me/blog/how-to-conquer-the-object-oriented-design-and-development-course-part-I + http://zhewe.me/blog/how-to-conquer-the-object-oriented-design-and-development-course-part-I + + oodd + + + course-advice + + + + + Ph.D. Dissertation: Helping Students Make Better Contributions to Open-Source Software Projects + <blockquote> <p>On May 23rd 2019, I successfully defensed my Ph.D. dissertation: “Helping Students Make Better Contributions to Open-Source Software Projects”.</p> </blockquote> <p>I owe my sincere thanks to Dr. Edward Gehringer, my advisor, for his all-time support and guidance. I am very grateful to him for his valuable time, continuous advice and patient feedback. I learned a lot from our weekly meetings and his insights that helped me to generate creative ideas in my mind.</p> <p>I would like to thank my other committee members, Dr. Christopher Parnin, Dr. Sarah Heckman, sand Dr. Ranga Vatsavai, for being my committee and providing valuable... + Wed, 15 May 2019 00:00:01 +0000 + http://zhewe.me/blog/phd-defense + http://zhewe.me/blog/phd-defense + + phd-defense + + + research + + + + + SIGCSE 2019 Poster: Using Bots to Improve GitHub Pull-Request Feedback + <blockquote> <p>Rising enrollments make it difficult for instructors and teaching assistants to give adequate feedback on each student’s work. Our course projects require students to submit GitHub pull requests as deliverables for their open-source software (OSS) projects. We have set up a static code analyzer and a continuous integration service on GitHub to help students check different aspects of the code. However, these tools have some limitations.</p> </blockquote> <h2 id="description">Description</h2> <p>In this poster, I discuss how we bypass the limitations of existing tools by implementing three Internet bots. These bots are either open source or free for OSS projects and... + Sun, 10 Mar 2019 11:11:11 +0000 + http://zhewe.me/blog/sigcse-2019-poster-using-bots-to-improve-github-pull-request-feedback + http://zhewe.me/blog/sigcse-2019-poster-using-bots-to-improve-github-pull-request-feedback + + sigcse + + poster + + bot + + github + + pull-request + + + expertiza + + research + + + + + diff --git a/index.html b/index.html new file mode 100644 index 00000000..c3a71a71 --- /dev/null +++ b/index.html @@ -0,0 +1 @@ +Zhewei Hu
author thumb

Hello, my name is Zhewei HuSoftware Engineer@Pinterest | Ph.D.@NC State

diff --git a/publications/index.html b/publications/index.html new file mode 100644 index 00000000..28294a0c --- /dev/null +++ b/publications/index.html @@ -0,0 +1,247 @@ + + + + + + + + + Publications | Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+
+
+

Publications

+
+
+
+
Ph.D. dissertation
+
+ Helping Students Make Better Contributions to Open-Source Software Projects
+ In North Carolina State University Libraries.
+ Zhewei Hu
+ [PDF] +
+
SIGCSE'19
+
+ Use Bots to Improve GitHub Pull-Request Feedback
+ Zhewei Hu, and Edward F. Gehringer
+ In Proceedings of the 50th ACM Technical Symposium on Computer Science Education, pp. 1262-1263. ACM, 2019.
+ [Link] +
+
ASEE-SE'19
+
+ Maintaining Student-Authored Open-Source Software for More Than 10 Years: An Experience Report
+ Zhewei Hu, Edward F. Gehringer, and Yang Song
+ In Proceedings of the 2019 ASEE Southeastern Section Conference.
+ [PDF] +
+
ICSE-SEET'18
+
+ Open-source software in class: students' common mistakes
+ Zhewei Hu, Yang Song, and Edward F. Gehringer
+ In Proceedings of the 40th International Conference on Software Engineering: Software Engineering Education and Training, pp. 40-48. ACM, 2018.
+ [PDF] +
+
ICSE'18 Companion
+
+ Improving formation of student teams: a clustering approach
+ Shoaib Akbar, Edward F. Gehringer, and Zhewei Hu
+ In Proceedings of the 40th International Conference on Software Engineering: Companion Proceedings, pp. 147-148. ACM, 2018.
+ [PDF] +
+
FIE'17
+
+ Collusion in educational peer assessment: How much do we need to worry about it?
+ Yang Song, Zhewei Hu, and Edward F. Gehringer
+ In Frontiers in Education Conference (FIE), pp. 1-8. IEEE, 2017.
+ [PDF] +
+
Master Thesis
+
+ Scaffolding the Grading Process for Peer Review Assignments: A Pluggable Reputation Web-Service Approach
+ Zhewei Hu
+ 2016.
+ [PDF] +
+
FIE'16
+
+ Five years of extra credit in a studio-based course: An effort to incentivize socially useful behavior
+ Edward F. Gehringer, Zhewei Hu, and Yang Song
+ In 2016 IEEE Frontiers in Education Conference (FIE), pp. 1-6. IEEE, 2016.
+ [PDF] +
FIE'16
+
+ An experiment with separate formative and summative rubrics in educational peer assessment
+ Yang Song, Zhewei Hu, Yifan Guo, and Edward F. Gehringer
+ In Frontiers in Education Conference (FIE), 2016 IEEE, pp. 1-7. IEEE, 2016.
+ [PDF] +
EDM (CSPRED)'16
+
+ The Role of Initial Input in Reputation Systems to Generate Accurate Aggregated Grades from Peer Assessment
+ Zhewei Hu, Yang Song, and Edward F. Gehringer
+ In EDM (Workshops). 2016.
+ [PDF] +
+
EDM (CSPRED)'16
+
+ Who Took Peer Review Seriously: Another Perspective on Student-Generated Quizzes
+ Yang Song, Zhewei Hu, and Edward F. Gehringer
+ In EDM (Workshops). 2016.
+ [PDF] +
+
EDM (CSPRED)'16
+
+ Toward better training in peer assessment: does calibration help?
+ Yang Song, Zhewei Hu, Edward F. Gehringer, Julia Morris, Jennifer Kidd, and Stacie Ringleb
+ In EDM (Workshops). 2016.
+ [PDF] +
+
FIE'15
+
+ Pluggable reputation systems for peer review: A web-service approach
+ Yang Song, Zhewei Hu, and Edward F. Gehringer
+ In Frontiers in Education Conference (FIE), 2015 IEEE, pp. 1-5. IEEE, 2015.
+ [PDF] +
+
ICWL'15
+
+ Closing the Circle: Use of Students’ Responses for Peer-Assessment Rubric Improvement
+ Yang Song, Zhewei Hu, and Edward F. Gehringer
+ In International Conference on Web-Based Learning, pp. 27-36. Springer, Cham, 2015.
+ [PDF] +
+
+
+
+
+
+ + + + + \ No newline at end of file diff --git a/robots.txt b/robots.txt new file mode 100755 index 00000000..a5f6db4b --- /dev/null +++ b/robots.txt @@ -0,0 +1,9 @@ +User-agent: * +Allow: / + +Disallow: /zetsu/ +Disallow: /lora/ +Disallow: /mug/ +Disallow: /end2end/ +Disallow: /simplest/ +Disallow: /dotX/ \ No newline at end of file diff --git a/search.json b/search.json new file mode 100644 index 00000000..b656345a --- /dev/null +++ b/search.json @@ -0,0 +1,187 @@ +[ + + { + "title" : "Books I Finished In 2023", + "category" : "books", + "tags" : "audible", + "url" : "/blog/books-i-finished-in-2023", + "date" : "1/10/2023" + } , + + { + "title" : "Books I Finished In 2022", + "category" : "books", + "tags" : "audible", + "url" : "/blog/books-i-finished-in-2022", + "date" : "31/12/2022" + } , + + { + "title" : "Books I Finished In 2021", + "category" : "books", + "tags" : "audible", + "url" : "/blog/books-i-finished-in-2021", + "date" : "31/12/2021" + } , + + { + "title" : "Danger Bot 2.0 Use Case", + "category" : "research", + "tags" : "internet-bot", + "url" : "/blog/danger-bot-2-use-case", + "date" : "11/7/2021" + } , + + { + "title" : "Danger Bot 2.0 Tutorial Video", + "category" : "research", + "tags" : "internet-bot", + "url" : "/blog/danger-bot-2-tutorial-video", + "date" : "11/7/2021" + } , + + { + "title" : "My First Week at Pinterest", + "category" : "personal-thoughts", + "tags" : "pinterest", + "url" : "/blog/my-first-week-at-pinterest", + "date" : "24/8/2019" + } , + + { + "title" : "How to conquer the Object-Oriented Design and Development (OODD) course? — Part II", + "category" : "course-advice", + "tags" : "oodd", + "url" : "/blog/how-to-conquer-the-object-oriented-design-and-development-course-part-II", + "date" : "6/8/2019" + } , + + { + "title" : "How to conquer the Object-Oriented Design and Development (OODD) course? — Part I", + "category" : "course-advice", + "tags" : "oodd", + "url" : "/blog/how-to-conquer-the-object-oriented-design-and-development-course-part-I", + "date" : "6/8/2019" + } , + + { + "title" : "Ph.D. Dissertation: Helping Students Make Better Contributions to Open-Source Software Projects", + "category" : "research", + "tags" : "phd-defense", + "url" : "/blog/phd-defense", + "date" : "15/5/2019" + } , + + { + "title" : "SIGCSE 2019 Poster: Using Bots to Improve GitHub Pull-Request Feedback", + "category" : "expertiza and research", + "tags" : "sigcse, poster, bot, github, and pull-request", + "url" : "/blog/sigcse-2019-poster-using-bots-to-improve-github-pull-request-feedback", + "date" : "10/3/2019" + } , + + { + "title" : "Procore Summer Intern: ReactJS, Relay, GraphQL and Kubernetes Project", + "category" : "intern and devops", + "tags" : "k8s", + "url" : "/blog/procore-summer-intern-project-reactjs-relay-graphql-kubernetes", + "date" : "10/8/2018" + } , + + { + "title" : "IBM Summer Intern: Chef and Kubernetes Projects", + "category" : "intern and devops", + "tags" : "continuous-integration, continuous-deployment, chef, inspec, test-kitchen, k8s, cni, and container-orchestration", + "url" : "/blog/ibm-summer-intern-projects-chef-kubernetes", + "date" : "11/8/2017" + } , + + { + "title" : "DevOps Continuous Integration (CI) and Continuous Deployment (CD) Pipeline", + "category" : "devops", + "tags" : "course-project, team-project, nodejs, continuous-integration, continuous-deployment, jenkins, and ansible", + "url" : "/blog/devops-continuous-intergration-and-continuous-deployment-pipeline", + "date" : "1/12/2016" + } , + + { + "title" : "Automated Program Repair in Expertiza", + "category" : "automated-program-repair and expertiza", + "tags" : "ruby, rails, and course-project", + "url" : "/blog/automated-program-repair-in-expertiza", + "date" : "30/11/2016" + } , + + { + "title" : "Offers.com Summer Intern: KPI Report", + "category" : "intern", + "tags" : "ruby and rails", + "url" : "/blog/offers-com-summer-intern-kpi-report", + "date" : "12/8/2016" + } , + + { + "title" : "Building Netflix Prize Prediction Model", + "category" : "data-mining", + "tags" : "course-project, team-project, ruby, rails, and matlab", + "url" : "/blog/building-netflix-prize-prediction-model", + "date" : "1/1/2016" + } , + + { + "title" : "OpenMRS Security Evaluation", + "category" : "software-security", + "tags" : "course-project and team-project", + "url" : "/blog/openmrs-security-evaluation", + "date" : "18/12/2015" + } , + + { + "title" : "Refactor staggered-deadline assignments in Expertiza", + "category" : "expertiza and software-development", + "tags" : "course-project, team-project, ruby, and rails", + "url" : "/blog/refactor-staggered-deadline-assignments-in-expertiza", + "date" : "17/5/2015" + } , + + { + "title" : "Software Development Process Bad Smell Detection", + "category" : "software-development", + "tags" : "course-project and team-project", + "url" : "/blog/software-development-process-bad-smell-detection", + "date" : "25/4/2015" + } , + + { + "title" : "Web Crawler Application – Scraping", + "category" : "data-mining and software-development", + "tags" : "course-project, team-project, and python", + "url" : "/blog/web-crawler-application-scraping", + "date" : "2/4/2015" + } , + + { + "title" : "OSS Project: Users Controller Refactoring in Expertiza", + "category" : "expertiza and software-development", + "tags" : "course-project, team-project, ruby, and rails", + "url" : "/blog/oss-project-user-controller-refactoring-in-expertiza", + "date" : "1/4/2015" + } , + + { + "title" : "Storyboards", + "category" : "software-development", + "tags" : "course-project, team-project, ruby, and rails", + "url" : "/blog/storyboards", + "date" : "12/3/2015" + } , + + { + "title" : "3D Space Invader", + "category" : "computer-graphics", + "tags" : "course-project, team-project, c, c++, and opengl", + "url" : "/blog/3d-space-invader", + "date" : "12/12/2014" + } + +] diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 00000000..5db86bcb --- /dev/null +++ b/sitemap.xml @@ -0,0 +1,1270 @@ + + + + + + http://zhewe.me/blog/books-i-finished-in-2023 + + 2023-10-01T23:59:59+00:00 + + + monthly + + + 0.5 + + + + + + + http://zhewe.me/blog/books-i-finished-in-2022 + + 2022-12-31T23:59:59+00:00 + + + monthly + + + 0.5 + + + + + + + http://zhewe.me/blog/books-i-finished-in-2021 + + 2021-12-31T23:59:59+00:00 + + + monthly + + + 0.5 + + + + + + + http://zhewe.me/blog/danger-bot-2-use-case + + 2021-07-11T00:00:01+00:00 + + + monthly + + + 0.5 + + + + + + + http://zhewe.me/blog/danger-bot-2-tutorial-video + + 2021-07-11T00:00:00+00:00 + + + monthly + + + 0.5 + + + + + + + http://zhewe.me/blog/my-first-week-at-pinterest + + 2019-08-24T00:10:40+00:00 + + + monthly + + + 0.5 + + + + + + + http://zhewe.me/blog/how-to-conquer-the-object-oriented-design-and-development-course-part-II + + 2019-08-06T00:00:00+00:00 + + + monthly + + + 0.5 + + + + + + + http://zhewe.me/blog/how-to-conquer-the-object-oriented-design-and-development-course-part-I + + 2019-08-06T00:00:00+00:00 + + + monthly + + + 0.5 + + + + + + + http://zhewe.me/blog/phd-defense + + 2019-05-15T00:00:01+00:00 + + + monthly + + + 0.5 + + + + + + + http://zhewe.me/blog/sigcse-2019-poster-using-bots-to-improve-github-pull-request-feedback + + 2019-03-10T11:11:11+00:00 + + + monthly + + + 0.5 + + + + + + + http://zhewe.me/blog/procore-summer-intern-project-reactjs-relay-graphql-kubernetes + + 2018-08-10T11:11:11+00:00 + + + monthly + + + 0.5 + + + + + + + http://zhewe.me/blog/ibm-summer-intern-projects-chef-kubernetes + + 2017-08-11T11:11:11+00:00 + + + monthly + + + 0.5 + + + + + + + http://zhewe.me/blog/devops-continuous-intergration-and-continuous-deployment-pipeline + + 2016-12-01T23:33:33+00:00 + + + monthly + + + 0.5 + + + + + + + http://zhewe.me/blog/automated-program-repair-in-expertiza + + 2016-11-30T11:59:59+00:00 + + + monthly + + + 0.5 + + + + + + + http://zhewe.me/blog/offers-com-summer-intern-kpi-report + + 2016-08-12T12:34:56+00:00 + + + monthly + + + 0.5 + + + + + + + http://zhewe.me/blog/building-netflix-prize-prediction-model + + 2016-01-01T11:11:11+00:00 + + + monthly + + + 0.5 + + + + + + + http://zhewe.me/blog/openmrs-security-evaluation + + 2015-12-18T12:34:56+00:00 + + + monthly + + + 0.5 + + + + + + + http://zhewe.me/blog/refactor-staggered-deadline-assignments-in-expertiza + + 2015-05-17T12:34:56+00:00 + + + monthly + + + 0.5 + + + + + + + http://zhewe.me/blog/software-development-process-bad-smell-detection + + 2015-04-25T12:34:56+00:00 + + + monthly + + + 0.5 + + + + + + + http://zhewe.me/blog/web-crawler-application-scraping + + 2015-04-02T12:34:56+00:00 + + + monthly + + + 0.5 + + + + + + + http://zhewe.me/blog/oss-project-user-controller-refactoring-in-expertiza + + 2015-04-01T12:34:56+00:00 + + + monthly + + + 0.5 + + + + + + + http://zhewe.me/blog/storyboards + + 2015-03-12T12:34:56+00:00 + + + monthly + + + 0.5 + + + + + + + http://zhewe.me/blog/3d-space-invader + + 2014-12-12T12:34:56+00:00 + + + monthly + + + 0.5 + + + + + + + + + + + + http://zhewe.me404.html + + 2023-12-25T04:58:39+00:00 + + + monthly + + + 0.3 + + + + + + + + + + http://zhewe.me/about/ + + 2023-12-25T04:58:39+00:00 + + + monthly + + + 0.3 + + + + + + + + + + http://zhewe.me/category/automated-program-repair/ + + 2023-12-25T04:58:39+00:00 + + + monthly + + + 0.3 + + + + + + + + + + http://zhewe.me/category/books/ + + 2023-12-25T04:58:39+00:00 + + + monthly + + + 0.3 + + + + + + + + + + http://zhewe.me/category/computer-graphics/ + + 2023-12-25T04:58:39+00:00 + + + monthly + + + 0.3 + + + + + + + + + + http://zhewe.me/category/course-advice/ + + 2023-12-25T04:58:39+00:00 + + + monthly + + + 0.3 + + + + + + + + + + http://zhewe.me/category/data-mining/ + + 2023-12-25T04:58:39+00:00 + + + monthly + + + 0.3 + + + + + + + + + + http://zhewe.me/category/devops/ + + 2023-12-25T04:58:39+00:00 + + + monthly + + + 0.3 + + + + + + + + + + http://zhewe.me/category/expertiza/ + + 2023-12-25T04:58:39+00:00 + + + monthly + + + 0.3 + + + + + + + + + + http://zhewe.me/category/intern/ + + 2023-12-25T04:58:39+00:00 + + + monthly + + + 0.3 + + + + + + + + + + http://zhewe.me/category/personal-thoughts/ + + 2023-12-25T04:58:39+00:00 + + + monthly + + + 0.3 + + + + + + + + + + http://zhewe.me/category/research/ + + 2023-12-25T04:58:39+00:00 + + + monthly + + + 0.3 + + + + + + + + + + http://zhewe.me/category/software-development/ + + 2023-12-25T04:58:39+00:00 + + + monthly + + + 0.3 + + + + + + + + + + http://zhewe.me/category/software-security/ + + 2023-12-25T04:58:39+00:00 + + + monthly + + + 0.3 + + + + + + + + + + + + + + + http://zhewe.me + + 2023-12-25T04:58:39+00:00 + + + monthly + + + 0.3 + + + + + + + + + + http://zhewe.me + + 2023-12-25T04:58:39+00:00 + + + monthly + + + 0.3 + + + + + + + + + + http://zhewe.me/publications/ + + 2023-12-25T04:58:39+00:00 + + + monthly + + + 0.3 + + + + + + + + + + + + + + + + + + + + http://zhewe.me/tag/ansible/ + + 2023-12-25T04:58:39+00:00 + + + monthly + + + 0.3 + + + + + + + + + + http://zhewe.me/tag/asp-net/ + + 2023-12-25T04:58:39+00:00 + + + monthly + + + 0.3 + + + + + + + + + + http://zhewe.me/tag/audible/ + + 2023-12-25T04:58:39+00:00 + + + monthly + + + 0.3 + + + + + + + + + + http://zhewe.me/tag/c#/ + + 2023-12-25T04:58:39+00:00 + + + monthly + + + 0.3 + + + + + + + + + + http://zhewe.me/tag/c++/ + + 2023-12-25T04:58:39+00:00 + + + monthly + + + 0.3 + + + + + + + + + + http://zhewe.me/tag/c/ + + 2023-12-25T04:58:39+00:00 + + + monthly + + + 0.3 + + + + + + + + + + http://zhewe.me/tag/chef/ + + 2023-12-25T04:58:39+00:00 + + + monthly + + + 0.3 + + + + + + + + + + http://zhewe.me/tag/cni/ + + 2023-12-25T04:58:39+00:00 + + + monthly + + + 0.3 + + + + + + + + + + http://zhewe.me/tag/container-orchestration/ + + 2023-12-25T04:58:39+00:00 + + + monthly + + + 0.3 + + + + + + + + + + http://zhewe.me/tag/continuous-deployment/ + + 2023-12-25T04:58:39+00:00 + + + monthly + + + 0.3 + + + + + + + + + + http://zhewe.me/tag/continuous-integration/ + + 2023-12-25T04:58:39+00:00 + + + monthly + + + 0.3 + + + + + + + + + + http://zhewe.me/tag/course-project/ + + 2023-12-25T04:58:39+00:00 + + + monthly + + + 0.3 + + + + + + + + + + http://zhewe.me/tag/flash/ + + 2023-12-25T04:58:39+00:00 + + + monthly + + + 0.3 + + + + + + + + + + http://zhewe.me/tag/github/ + + 2023-12-25T04:58:39+00:00 + + + monthly + + + 0.3 + + + + + + + + + + http://zhewe.me/tag/inspec/ + + 2023-12-25T04:58:39+00:00 + + + monthly + + + 0.3 + + + + + + + + + + http://zhewe.me/tag/bot/ + + 2023-12-25T04:58:39+00:00 + + + monthly + + + 0.3 + + + + + + + + + + http://zhewe.me/tag/jenkins/ + + 2023-12-25T04:58:39+00:00 + + + monthly + + + 0.3 + + + + + + + + + + http://zhewe.me/tag/k8s/ + + 2023-12-25T04:58:39+00:00 + + + monthly + + + 0.3 + + + + + + + + + + http://zhewe.me/tag/matlab/ + + 2023-12-25T04:58:39+00:00 + + + monthly + + + 0.3 + + + + + + + + + + http://zhewe.me/tag/nodejs/ + + 2023-12-25T04:58:39+00:00 + + + monthly + + + 0.3 + + + + + + + + + + http://zhewe.me/tag/oodd/ + + 2023-12-25T04:58:39+00:00 + + + monthly + + + 0.3 + + + + + + + + + + http://zhewe.me/tag/phd-defense/ + + 2023-12-25T04:58:39+00:00 + + + monthly + + + 0.3 + + + + + + + + + + http://zhewe.me/tag/pinterest/ + + 2023-12-25T04:58:39+00:00 + + + monthly + + + 0.3 + + + + + + + + + + http://zhewe.me/tag/poster/ + + 2023-12-25T04:58:39+00:00 + + + monthly + + + 0.3 + + + + + + + + + + http://zhewe.me/tag/pull-request/ + + 2023-12-25T04:58:39+00:00 + + + monthly + + + 0.3 + + + + + + + + + + http://zhewe.me/tag/python/ + + 2023-12-25T04:58:39+00:00 + + + monthly + + + 0.3 + + + + + + + + + + http://zhewe.me/tag/rails/ + + 2023-12-25T04:58:39+00:00 + + + monthly + + + 0.3 + + + + + + + + + + http://zhewe.me/tag/ruby/ + + 2023-12-25T04:58:39+00:00 + + + monthly + + + 0.3 + + + + + + + + + + http://zhewe.me/tag/sigcse/ + + 2023-12-25T04:58:39+00:00 + + + monthly + + + 0.3 + + + + + + + + + + http://zhewe.me/tag/team-project/ + + 2023-12-25T04:58:39+00:00 + + + monthly + + + 0.3 + + + + + + + + + + http://zhewe.me/tag/test-kitchen/ + + 2023-12-25T04:58:39+00:00 + + + monthly + + + 0.3 + + + + + + + + + + http://zhewe.me/tag/xml/ + + 2023-12-25T04:58:39+00:00 + + + monthly + + + 0.3 + + + + + + + + + + http://zhewe.me/work_experience/ + + 2023-12-25T04:58:39+00:00 + + + monthly + + + 0.3 + + + + + + + + + \ No newline at end of file diff --git a/tag/ansible/index.html b/tag/ansible/index.html new file mode 100644 index 00000000..0ba60f5b --- /dev/null +++ b/tag/ansible/index.html @@ -0,0 +1,162 @@ + + + + + + + + + Ansible | Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+ + +
+
+ + + + + \ No newline at end of file diff --git a/tag/asp-net/index.html b/tag/asp-net/index.html new file mode 100644 index 00000000..5ec293ab --- /dev/null +++ b/tag/asp-net/index.html @@ -0,0 +1,148 @@ + + + + + + + + + ASP.NET | Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+ +
+

There are no articles for the tag: ASP.NET

+
+
+
+ + + + + \ No newline at end of file diff --git a/tag/audible/index.html b/tag/audible/index.html new file mode 100644 index 00000000..3ffe347f --- /dev/null +++ b/tag/audible/index.html @@ -0,0 +1,201 @@ + + + + + + + + + Audible | Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+ +
+
+

+ + Books I Finished In 2023 + +

+ +
+

The book I finished in 2023 with notes. The Simple Path to Wealth: Your Road Map to Financial Independence and a Rich, Free Life The market always goes up. Investment portfolio: Stocks (VTSAX) + bonds (VBTLX) + cash,... Keep reading »

+
+
+
+

+ + Books I Finished In 2022 + +

+ +
+

The book I finished in 2022 with notes. Maybe You Should Talk To Someone: A Therapist, HER Therapist, and Our Lives Revealed A therapists also needs to see another therapist just like us. The Space Race Many astronauts... Keep reading »

+
+ +
+
+ + + + + \ No newline at end of file diff --git a/tag/bot/index.html b/tag/bot/index.html new file mode 100644 index 00000000..c3028801 --- /dev/null +++ b/tag/bot/index.html @@ -0,0 +1,162 @@ + + + + + + + + + Internet Bot | Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+ + +
+
+ + + + + \ No newline at end of file diff --git a/tag/c#/index.html b/tag/c#/index.html new file mode 100644 index 00000000..c0c1e676 --- /dev/null +++ b/tag/c#/index.html @@ -0,0 +1,148 @@ + + + + + + + + + C# | Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+ +
+

There are no articles for the tag: C#

+
+
+
+ + + + + \ No newline at end of file diff --git a/tag/c++/index.html b/tag/c++/index.html new file mode 100644 index 00000000..b8a6dcd1 --- /dev/null +++ b/tag/c++/index.html @@ -0,0 +1,162 @@ + + + + + + + + + C++ | Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+ +
+
+

+ + 3D Space Invader + +

+ +
+

I reproduced the classic game Space Invaders, which is considered one of the most influential video games of all time. This game helped expand the video game industry from a novelty to a global industry, and ushered in... Keep reading »

+
+
+
+ + + + + \ No newline at end of file diff --git a/tag/c/index.html b/tag/c/index.html new file mode 100644 index 00000000..4e485fdf --- /dev/null +++ b/tag/c/index.html @@ -0,0 +1,162 @@ + + + + + + + + + C | Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+ +
+
+

+ + 3D Space Invader + +

+ +
+

I reproduced the classic game Space Invaders, which is considered one of the most influential video games of all time. This game helped expand the video game industry from a novelty to a global industry, and ushered in... Keep reading »

+
+
+
+ + + + + \ No newline at end of file diff --git a/tag/chef/index.html b/tag/chef/index.html new file mode 100644 index 00000000..497f2a4a --- /dev/null +++ b/tag/chef/index.html @@ -0,0 +1,162 @@ + + + + + + + + + Chef | Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+ + +
+
+ + + + + \ No newline at end of file diff --git a/tag/cni/index.html b/tag/cni/index.html new file mode 100644 index 00000000..a2441a83 --- /dev/null +++ b/tag/cni/index.html @@ -0,0 +1,162 @@ + + + + + + + + + Container Network Interface | Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+ + +
+
+ + + + + \ No newline at end of file diff --git a/tag/container-orchestration/index.html b/tag/container-orchestration/index.html new file mode 100644 index 00000000..1b17df48 --- /dev/null +++ b/tag/container-orchestration/index.html @@ -0,0 +1,162 @@ + + + + + + + + + Container Orchestration | Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+ + +
+
+ + + + + \ No newline at end of file diff --git a/tag/continuous-deployment/index.html b/tag/continuous-deployment/index.html new file mode 100644 index 00000000..dc18ebac --- /dev/null +++ b/tag/continuous-deployment/index.html @@ -0,0 +1,179 @@ + + + + + + + + + Continuous Deployment | Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+ + + +
+
+ + + + + \ No newline at end of file diff --git a/tag/continuous-integration/index.html b/tag/continuous-integration/index.html new file mode 100644 index 00000000..64f8d73e --- /dev/null +++ b/tag/continuous-integration/index.html @@ -0,0 +1,179 @@ + + + + + + + + + Continuous Integration | Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+ + + +
+
+ + + + + \ No newline at end of file diff --git a/tag/course-project/index.html b/tag/course-project/index.html new file mode 100644 index 00000000..0c078ef5 --- /dev/null +++ b/tag/course-project/index.html @@ -0,0 +1,315 @@ + + + + + + + + + course Project | Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+ + + + +
+
+

+ + OpenMRS Security Evaluation + +

+ +
+

Open Medical Record System (OpenMRS®) was created in 2004 as a open source medical record system platform for developing countries – a tide which rises all ships. Read more at: About OpenMRS Description Performed a security review based... Keep reading »

+
+ + + + +
+
+

+ + Storyboards + +

+ +
+

Storyboarding is used in software development as part of identifying the specifications for a particular set of software. It is useful during software engineering because it helps the user understand exactly how the software will work, much better... Keep reading »

+
+
+
+

+ + 3D Space Invader + +

+ +
+

I reproduced the classic game Space Invaders, which is considered one of the most influential video games of all time. This game helped expand the video game industry from a novelty to a global industry, and ushered in... Keep reading »

+
+
+
+ + + + + \ No newline at end of file diff --git a/tag/flash/index.html b/tag/flash/index.html new file mode 100644 index 00000000..9635f892 --- /dev/null +++ b/tag/flash/index.html @@ -0,0 +1,148 @@ + + + + + + + + + FLASH | Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+ +
+

There are no articles for the tag: FLASH

+
+
+
+ + + + + \ No newline at end of file diff --git a/tag/github/index.html b/tag/github/index.html new file mode 100644 index 00000000..2edb2018 --- /dev/null +++ b/tag/github/index.html @@ -0,0 +1,162 @@ + + + + + + + + + GitHub | Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+ + +
+
+ + + + + \ No newline at end of file diff --git a/tag/inspec/index.html b/tag/inspec/index.html new file mode 100644 index 00000000..f0f69be6 --- /dev/null +++ b/tag/inspec/index.html @@ -0,0 +1,162 @@ + + + + + + + + + Inspec | Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+ + +
+
+ + + + + \ No newline at end of file diff --git a/tag/jenkins/index.html b/tag/jenkins/index.html new file mode 100644 index 00000000..fe986bba --- /dev/null +++ b/tag/jenkins/index.html @@ -0,0 +1,162 @@ + + + + + + + + + Jenkins | Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+ + +
+
+ + + + + \ No newline at end of file diff --git a/tag/k8s/index.html b/tag/k8s/index.html new file mode 100644 index 00000000..4e32d723 --- /dev/null +++ b/tag/k8s/index.html @@ -0,0 +1,179 @@ + + + + + + + + + Kubernetes | Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+ + + +
+
+ + + + + \ No newline at end of file diff --git a/tag/matlab/index.html b/tag/matlab/index.html new file mode 100644 index 00000000..197cb5e2 --- /dev/null +++ b/tag/matlab/index.html @@ -0,0 +1,162 @@ + + + + + + + + + Matlab | Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+ + +
+
+ + + + + \ No newline at end of file diff --git a/tag/nodejs/index.html b/tag/nodejs/index.html new file mode 100644 index 00000000..df12f6a5 --- /dev/null +++ b/tag/nodejs/index.html @@ -0,0 +1,162 @@ + + + + + + + + + Node.js | Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+ + +
+
+ + + + + \ No newline at end of file diff --git a/tag/oodd/index.html b/tag/oodd/index.html new file mode 100644 index 00000000..a92cae60 --- /dev/null +++ b/tag/oodd/index.html @@ -0,0 +1,179 @@ + + + + + + + + + Object-Oriented Design and Development (OODD) | Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+ + + +
+
+ + + + + \ No newline at end of file diff --git a/tag/phd-defense/index.html b/tag/phd-defense/index.html new file mode 100644 index 00000000..5d36ad14 --- /dev/null +++ b/tag/phd-defense/index.html @@ -0,0 +1,162 @@ + + + + + + + + + Ph.D. Defense | Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+ + +
+
+ + + + + \ No newline at end of file diff --git a/tag/pinterest/index.html b/tag/pinterest/index.html new file mode 100644 index 00000000..ff44ba8a --- /dev/null +++ b/tag/pinterest/index.html @@ -0,0 +1,162 @@ + + + + + + + + + Pinterest | Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+ +
+
+

+ + My First Week at Pinterest + +

+ +
+

I just finished my first week at Pinterest. Summarize my feeling in two words: awesome and fantastic! Fun fact: I met CEO Ben Silbermann four times in person (twice in a cafeteria, once in a corridor and once... Keep reading »

+
+
+
+ + + + + \ No newline at end of file diff --git a/tag/poster/index.html b/tag/poster/index.html new file mode 100644 index 00000000..b55a0c2b --- /dev/null +++ b/tag/poster/index.html @@ -0,0 +1,162 @@ + + + + + + + + + Poster | Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+ + +
+
+ + + + + \ No newline at end of file diff --git a/tag/pull-request/index.html b/tag/pull-request/index.html new file mode 100644 index 00000000..2ab743f8 --- /dev/null +++ b/tag/pull-request/index.html @@ -0,0 +1,162 @@ + + + + + + + + + Pull Request | Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+ + +
+
+ + + + + \ No newline at end of file diff --git a/tag/python/index.html b/tag/python/index.html new file mode 100644 index 00000000..e58cb302 --- /dev/null +++ b/tag/python/index.html @@ -0,0 +1,162 @@ + + + + + + + + + Python | Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+ + +
+
+ + + + + \ No newline at end of file diff --git a/tag/rails/index.html b/tag/rails/index.html new file mode 100644 index 00000000..b65e197f --- /dev/null +++ b/tag/rails/index.html @@ -0,0 +1,247 @@ + + + + + + + + + Rails | Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+ + +
+
+

+ + Offers.com Summer Intern: KPI Report + +

+ +
+

A KPI report for marketing team using Ruby on Rails as web application framework, Sequel as ORM layer for mapping records to Ruby objects and handling associated records and PostgreSQL on AWS as the database. Description Utilized Ruby... Keep reading »

+
+ + + +
+
+

+ + Storyboards + +

+ +
+

Storyboarding is used in software development as part of identifying the specifications for a particular set of software. It is useful during software engineering because it helps the user understand exactly how the software will work, much better... Keep reading »

+
+
+
+ + + + + \ No newline at end of file diff --git a/tag/ruby/index.html b/tag/ruby/index.html new file mode 100644 index 00000000..545f158f --- /dev/null +++ b/tag/ruby/index.html @@ -0,0 +1,247 @@ + + + + + + + + + Ruby | Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+ + +
+
+

+ + Offers.com Summer Intern: KPI Report + +

+ +
+

A KPI report for marketing team using Ruby on Rails as web application framework, Sequel as ORM layer for mapping records to Ruby objects and handling associated records and PostgreSQL on AWS as the database. Description Utilized Ruby... Keep reading »

+
+ + + +
+
+

+ + Storyboards + +

+ +
+

Storyboarding is used in software development as part of identifying the specifications for a particular set of software. It is useful during software engineering because it helps the user understand exactly how the software will work, much better... Keep reading »

+
+
+
+ + + + + \ No newline at end of file diff --git a/tag/sigcse/index.html b/tag/sigcse/index.html new file mode 100644 index 00000000..7d56babe --- /dev/null +++ b/tag/sigcse/index.html @@ -0,0 +1,162 @@ + + + + + + + + + SIGCSE | Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+ + +
+
+ + + + + \ No newline at end of file diff --git a/tag/team-project/index.html b/tag/team-project/index.html new file mode 100644 index 00000000..88584954 --- /dev/null +++ b/tag/team-project/index.html @@ -0,0 +1,298 @@ + + + + + + + + + Team Project | Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+ + + +
+
+

+ + OpenMRS Security Evaluation + +

+ +
+

Open Medical Record System (OpenMRS®) was created in 2004 as a open source medical record system platform for developing countries – a tide which rises all ships. Read more at: About OpenMRS Description Performed a security review based... Keep reading »

+
+ + + + +
+
+

+ + Storyboards + +

+ +
+

Storyboarding is used in software development as part of identifying the specifications for a particular set of software. It is useful during software engineering because it helps the user understand exactly how the software will work, much better... Keep reading »

+
+
+
+

+ + 3D Space Invader + +

+ +
+

I reproduced the classic game Space Invaders, which is considered one of the most influential video games of all time. This game helped expand the video game industry from a novelty to a global industry, and ushered in... Keep reading »

+
+
+
+ + + + + \ No newline at end of file diff --git a/tag/test-kitchen/index.html b/tag/test-kitchen/index.html new file mode 100644 index 00000000..7c61a44f --- /dev/null +++ b/tag/test-kitchen/index.html @@ -0,0 +1,162 @@ + + + + + + + + + Test Kitchen | Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+ + +
+
+ + + + + \ No newline at end of file diff --git a/tag/xml/index.html b/tag/xml/index.html new file mode 100644 index 00000000..00ec451a --- /dev/null +++ b/tag/xml/index.html @@ -0,0 +1,148 @@ + + + + + + + + + XML | Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+ +
+

There are no articles for the tag: XML

+
+
+
+ + + + + \ No newline at end of file diff --git a/work_experience/index.html b/work_experience/index.html new file mode 100644 index 00000000..33711fa3 --- /dev/null +++ b/work_experience/index.html @@ -0,0 +1,175 @@ + + + + + + + + + Work Experience | Zhewei Hu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + author thumb + +

Hello, my name is Zhewei Hu
Software Engineer@Pinterest
Ph.D.@NC State

+ +
+
+
+
+
+
+

Work Experience

+
+
+
+
Pinterest
+
+ Software Engineer (full time)
+
+
NC State University
+
+ Graduate Research and Senior Teaching Assistant
+ I have more than 3 years' Ruby on Rails development experience. Since 2014 I began to work on an open source project named Expertiza. Expertiza is a web application through which students can submit and peer-review learning objects (articles, code, etc.). This system is used by more than 21 institutions all over the world. Now I am the chief maintainer and contributor of the system and contributed almost 1000 commits to the master branch. I am familiar with the RSpec testing framework and write tests to increase the test coverage from 28% to 48%. +
+
Procore Technologies
+
+ Site Reliability Engineer Intern
+ In 2018 summer, I interned as a site reliability engineer at Procore Technologies. During this period, I implemented a GraphQL API for an on-demand staging environment to manage Kubernetes resources on Tectonic. And I also built the front end of this system using React and Relay. Besides, I wrote RSpec specs for the whole GraphQL API and set up CircleCI to continuously run tests, build docker images and push images to Quay.io. +
+
IBM
+
+ SDE Intern (DevOps)
+ In 2017 summer I interned as a DevOps engineer at IBM. During this period, I closely worked with other team members and finished 2 projects. For the first project, I created an infrastructure test suite written by InSpec to verify configuration results converged by Test Kitchen and Chef. For my second project, I migrated a big data sharing platform to Kubernetes cluster. +
+
Offers.com
+
+ Software Developer Intern
+ In 2016 summer, I interned as a software engineer at Offers.com in Austin, TX. During this period, I utilized Ruby on Rails, Sequel, and PostgreSQL to build a Key Performance Index (KPI) report for the marketing team. And I also fixed more than 15 issues from JIRA scrum board with Agile methodology. What is more, I implemented Rubocop on 6 projects to enforce coding guidelines (corrected more than 7000 LOC) and created a pre-commit git hook to ensure the code quality of each commit. +
+
+
+
+
+
+ + + + + \ No newline at end of file